{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "09_SkimLit_nlp_milestone_project_2_video.ipynb",
      "provenance": [],
      "collapsed_sections": [],
      "authorship_tag": "ABX9TyOybfSki//T36KzbN7ZA0wp",
      "include_colab_link": true
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    },
    "accelerator": "GPU"
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "view-in-github",
        "colab_type": "text"
      },
      "source": [
        "<a href=\"https://colab.research.google.com/github/mrdbourke/tensorflow-deep-learning/blob/main/video_notebooks/09_SkimLit_nlp_milestone_project_2_video.ipynb\" target=\"_parent\"><img src=\"https://colab.research.google.com/assets/colab-badge.svg\" alt=\"Open In Colab\"/></a>"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "nA_VIr44B2tp"
      },
      "source": [
        "# Milestone Project 2: SkimLit 📄🔥\n",
        "\n",
        "The purpose of this notebook is to build an NLP model to make reading medical abstracts easier.\n",
        "\n",
        "The paper we're replicating (the source of the dataset that we'll be using) is available here: https://arxiv.org/abs/1710.06071\n",
        "\n",
        "And reading through the paper above, we see that the model architecture that they use to achieve their best results is available here: https://arxiv.org/abs/1612.05251\n",
        "\n",
        "📖 **Resource:** If you want to find the ground truth for this notebook (with lots of diagrams and text annotations) see the GitHub: https://github.com/mrdbourke/tensorflow-deep-learning/blob/main/09_SkimLit_nlp_milestone_project_2.ipynb"
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "rycCB-roCAnq"
      },
      "source": [
        "## Confirm access to a GPU "
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "fYS3Vo_lCpxB",
        "outputId": "1f296155-137d-4970-e07d-cedfd04daa6d"
      },
      "source": [
        "!nvidia-smi -L"
      ],
      "execution_count": 2,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "GPU 0: Tesla T4 (UUID: GPU-db391c52-2677-e2e6-6a8f-1efa97e89026)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "cmr6s-d6Cu9C"
      },
      "source": [
        "## Get data\n",
        "\n",
        "Since we'll be replicating the paper above (PubMed 200k RCT), let's download the dataset they used.\n",
        "\n",
        "We can do so from the authors GitHub: https://github.com/Franck-Dernoncourt/pubmed-rct "
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "UA1d0NEyDPDs",
        "outputId": "28f1fb51-cc63-46c3-f777-69a40124a586"
      },
      "source": [
        "!git clone https://github.com/Franck-Dernoncourt/pubmed-rct\n",
        "!ls pubmed-rct"
      ],
      "execution_count": 3,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Cloning into 'pubmed-rct'...\n",
            "remote: Enumerating objects: 30, done.\u001b[K\n",
            "remote: Total 30 (delta 0), reused 0 (delta 0), pack-reused 30\u001b[K\n",
            "Unpacking objects: 100% (30/30), done.\n",
            "PubMed_200k_RCT\n",
            "PubMed_200k_RCT_numbers_replaced_with_at_sign\n",
            "PubMed_20k_RCT\n",
            "PubMed_20k_RCT_numbers_replaced_with_at_sign\n",
            "README.md\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Us8PTYERDXi_",
        "outputId": "d42d632c-0ede-4835-9492-0950be155147"
      },
      "source": [
        "# Check what files are in the PubMed_20K dataset\n",
        "!ls pubmed-rct/PubMed_20k_RCT_numbers_replaced_with_at_sign/"
      ],
      "execution_count": 4,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "dev.txt  test.txt  train.txt\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "puDl4jrqEDWT"
      },
      "source": [
        "# Start our experiments using the 20k dataset with numbers replaced by \"@\" sign\n",
        "data_dir = \"/content/pubmed-rct/PubMed_20k_RCT_numbers_replaced_with_at_sign/\""
      ],
      "execution_count": 5,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "UBwoi_k9FO7C",
        "outputId": "eec2efab-b090-4e5a-c439-20e39ba66954"
      },
      "source": [
        "# Check all of the filenames in the target directory\n",
        "import os\n",
        "filenames = [data_dir + filename for filename in os.listdir(data_dir)]\n",
        "filenames"
      ],
      "execution_count": 6,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "['/content/pubmed-rct/PubMed_20k_RCT_numbers_replaced_with_at_sign/train.txt',\n",
              " '/content/pubmed-rct/PubMed_20k_RCT_numbers_replaced_with_at_sign/test.txt',\n",
              " '/content/pubmed-rct/PubMed_20k_RCT_numbers_replaced_with_at_sign/dev.txt']"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 6
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "GnDo584DFWAF"
      },
      "source": [
        "## Preprocess data\n",
        "\n",
        "Now we've got some text data, it's time to become one with it.\n",
        "\n",
        "And one of the best ways to become one with the data is to...\n",
        "\n",
        "> Visualize, visualize, visualize \n",
        "\n",
        "So with that in mind, let's write a function to read in all of the lines of a target text file."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Cu9PH_z9IrCM"
      },
      "source": [
        "# Create function to read the lines of a document\n",
        "def get_lines(filename):\n",
        "  \"\"\"\n",
        "  Reads filename (a text filename) and returns the lines of text as a list.\n",
        "\n",
        "  Args:\n",
        "    filename: a string containing the target filepath.\n",
        "\n",
        "  Returns:\n",
        "    A list of strings with one string per line from the target filename.\n",
        "  \"\"\"\n",
        "  with open(filename, \"r\") as f:\n",
        "    return f.readlines()"
      ],
      "execution_count": 7,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "WMI44b1HJXvx",
        "outputId": "c7d4a25a-a378-46a2-e499-53b60c06781c"
      },
      "source": [
        "# Let's read in the training lines\n",
        "train_lines = get_lines(data_dir+\"train.txt\") # read the lines with the training file\n",
        "train_lines[:27]"
      ],
      "execution_count": 8,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "['###24293578\\n',\n",
              " 'OBJECTIVE\\tTo investigate the efficacy of @ weeks of daily low-dose oral prednisolone in improving pain , mobility , and systemic low-grade inflammation in the short term and whether the effect would be sustained at @ weeks in older adults with moderate to severe knee osteoarthritis ( OA ) .\\n',\n",
              " 'METHODS\\tA total of @ patients with primary knee OA were randomized @:@ ; @ received @ mg/day of prednisolone and @ received placebo for @ weeks .\\n',\n",
              " 'METHODS\\tOutcome measures included pain reduction and improvement in function scores and systemic inflammation markers .\\n',\n",
              " 'METHODS\\tPain was assessed using the visual analog pain scale ( @-@ mm ) .\\n',\n",
              " 'METHODS\\tSecondary outcome measures included the Western Ontario and McMaster Universities Osteoarthritis Index scores , patient global assessment ( PGA ) of the severity of knee OA , and @-min walk distance ( @MWD ) .\\n',\n",
              " 'METHODS\\tSerum levels of interleukin @ ( IL-@ ) , IL-@ , tumor necrosis factor ( TNF ) - , and high-sensitivity C-reactive protein ( hsCRP ) were measured .\\n',\n",
              " 'RESULTS\\tThere was a clinically relevant reduction in the intervention group compared to the placebo group for knee pain , physical function , PGA , and @MWD at @ weeks .\\n',\n",
              " 'RESULTS\\tThe mean difference between treatment arms ( @ % CI ) was @ ( @-@ @ ) , p < @ ; @ ( @-@ @ ) , p < @ ; @ ( @-@ @ ) , p < @ ; and @ ( @-@ @ ) , p < @ , respectively .\\n',\n",
              " 'RESULTS\\tFurther , there was a clinically relevant reduction in the serum levels of IL-@ , IL-@ , TNF - , and hsCRP at @ weeks in the intervention group when compared to the placebo group .\\n',\n",
              " 'RESULTS\\tThese differences remained significant at @ weeks .\\n',\n",
              " 'RESULTS\\tThe Outcome Measures in Rheumatology Clinical Trials-Osteoarthritis Research Society International responder rate was @ % in the intervention group and @ % in the placebo group ( p < @ ) .\\n',\n",
              " 'CONCLUSIONS\\tLow-dose oral prednisolone had both a short-term and a longer sustained effect resulting in less knee pain , better physical function , and attenuation of systemic inflammation in older patients with knee OA ( ClinicalTrials.gov identifier NCT@ ) .\\n',\n",
              " '\\n',\n",
              " '###24854809\\n',\n",
              " 'BACKGROUND\\tEmotional eating is associated with overeating and the development of obesity .\\n',\n",
              " 'BACKGROUND\\tYet , empirical evidence for individual ( trait ) differences in emotional eating and cognitive mechanisms that contribute to eating during sad mood remain equivocal .\\n',\n",
              " 'OBJECTIVE\\tThe aim of this study was to test if attention bias for food moderates the effect of self-reported emotional eating during sad mood ( vs neutral mood ) on actual food intake .\\n',\n",
              " 'OBJECTIVE\\tIt was expected that emotional eating is predictive of elevated attention for food and higher food intake after an experimentally induced sad mood and that attentional maintenance on food predicts food intake during a sad versus a neutral mood .\\n',\n",
              " 'METHODS\\tParticipants ( N = @ ) were randomly assigned to one of the two experimental mood induction conditions ( sad/neutral ) .\\n',\n",
              " 'METHODS\\tAttentional biases for high caloric foods were measured by eye tracking during a visual probe task with pictorial food and neutral stimuli .\\n',\n",
              " 'METHODS\\tSelf-reported emotional eating was assessed with the Dutch Eating Behavior Questionnaire ( DEBQ ) and ad libitum food intake was tested by a disguised food offer .\\n',\n",
              " 'RESULTS\\tHierarchical multivariate regression modeling showed that self-reported emotional eating did not account for changes in attention allocation for food or food intake in either condition .\\n',\n",
              " 'RESULTS\\tYet , attention maintenance on food cues was significantly related to increased intake specifically in the neutral condition , but not in the sad mood condition .\\n',\n",
              " 'CONCLUSIONS\\tThe current findings show that self-reported emotional eating ( based on the DEBQ ) might not validly predict who overeats when sad , at least not in a laboratory setting with healthy women .\\n',\n",
              " 'CONCLUSIONS\\tResults further suggest that attention maintenance on food relates to eating motivation when in a neutral affective state , and might therefore be a cognitive mechanism contributing to increased food intake in general , but maybe not during sad mood .\\n',\n",
              " '\\n']"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 8
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "ao0T3Ev_JgUP",
        "outputId": "51c02d6e-4774-4ac5-976d-83c520d53d4d"
      },
      "source": [
        "len(train_lines)"
      ],
      "execution_count": 9,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "210040"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 9
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "kNMQkP7ZJg--"
      },
      "source": [
        "Let's think about how we want our data to look...\n",
        "\n",
        "How I think our data would be best represented...\n",
        "\n",
        "```\n",
        "[{'line_number': 0,\n",
        "   'target': 'BACKGROUND',\n",
        "   'text': \"Emotional eating is associated with overeating and the development of obesity .\\n\"\n",
        "   'total_lines': 11},\n",
        "   ...]\n",
        "```\n",
        "\n",
        "Let's write a function which turns each of our datasets into the above format so we can continue to prepare our data for modelling."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "pBru3qb1K7hd"
      },
      "source": [
        "def preprocess_text_with_line_numbers(filename):\n",
        "  \"\"\"\n",
        "  Returns a list of dictionaries of abstract line data.\n",
        "\n",
        "  Takes in filename, reads it contents and sorts through each line,\n",
        "  extracting things like the target label, the text of the sentnece,\n",
        "  how many sentences are in the current abstract and what sentence\n",
        "  number the target line is.\n",
        "  \"\"\"\n",
        "  input_lines = get_lines(filename) # get all lines from filename\n",
        "  abstract_lines = \"\" # create an empty abstract\n",
        "  abstract_samples = [] # create an empty list of abstracts\n",
        "\n",
        "  # Loop through each line in the target file\n",
        "  for line in input_lines:\n",
        "    if line.startswith(\"###\"): # check to see if the is an ID line\n",
        "      abstract_id = line\n",
        "      abstract_lines = \"\" # reset the abstract string if the line is an ID line\n",
        "\n",
        "    elif line.isspace(): # check to see if line is a new line\n",
        "      abstract_line_split = abstract_lines.splitlines() # split abstract into separate lines\n",
        "\n",
        "      # Iterate through each line in a single abstract and count them at the same time\n",
        "      for abstract_line_number, abstract_line in enumerate(abstract_line_split):\n",
        "        line_data = {} # create an empty dictionary for each line\n",
        "        target_text_split = abstract_line.split(\"\\t\") # split target label from text \n",
        "        line_data[\"target\"] = target_text_split[0] # get target label\n",
        "        line_data[\"text\"] = target_text_split[1].lower() # get target text and lower it\n",
        "        line_data[\"line_number\"] = abstract_line_number # what number line does the line appear in the abstract?\n",
        "        line_data[\"total_lines\"] = len(abstract_line_split) - 1 # how many total lines are there in the target abstract? (start from 0)\n",
        "        abstract_samples.append(line_data) # add line data to abstract samples list\n",
        "\n",
        "    else: # if the above conditions aren't fulfilled, the line contains a labelled sentence\n",
        "      abstract_lines += line\n",
        "  \n",
        "  return abstract_samples"
      ],
      "execution_count": 10,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "ZAj-xN1R6gag",
        "outputId": "d24b06bf-f9f2-4564-afaa-a2b1224783bb"
      },
      "source": [
        "# Get data from file and preprocess it\n",
        "%%time\n",
        "train_samples = preprocess_text_with_line_numbers(data_dir + \"train.txt\")\n",
        "val_samples = preprocess_text_with_line_numbers(data_dir + \"dev.txt\") # dev is another name for validation dataset\n",
        "test_samples = preprocess_text_with_line_numbers(data_dir + \"test.txt\")\n",
        "print(len(train_samples), len(val_samples), len(test_samples))"
      ],
      "execution_count": 11,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "180040 30212 30135\n",
            "CPU times: user 442 ms, sys: 86.5 ms, total: 529 ms\n",
            "Wall time: 532 ms\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "hO-DZBap9LxA",
        "outputId": "e28f67ed-3bc4-442a-b158-bdc3ab6829e3"
      },
      "source": [
        "# Check the first abstract of our training data\n",
        "train_samples[:14]"
      ],
      "execution_count": 12,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[{'line_number': 0,\n",
              "  'target': 'OBJECTIVE',\n",
              "  'text': 'to investigate the efficacy of @ weeks of daily low-dose oral prednisolone in improving pain , mobility , and systemic low-grade inflammation in the short term and whether the effect would be sustained at @ weeks in older adults with moderate to severe knee osteoarthritis ( oa ) .',\n",
              "  'total_lines': 11},\n",
              " {'line_number': 1,\n",
              "  'target': 'METHODS',\n",
              "  'text': 'a total of @ patients with primary knee oa were randomized @:@ ; @ received @ mg/day of prednisolone and @ received placebo for @ weeks .',\n",
              "  'total_lines': 11},\n",
              " {'line_number': 2,\n",
              "  'target': 'METHODS',\n",
              "  'text': 'outcome measures included pain reduction and improvement in function scores and systemic inflammation markers .',\n",
              "  'total_lines': 11},\n",
              " {'line_number': 3,\n",
              "  'target': 'METHODS',\n",
              "  'text': 'pain was assessed using the visual analog pain scale ( @-@ mm ) .',\n",
              "  'total_lines': 11},\n",
              " {'line_number': 4,\n",
              "  'target': 'METHODS',\n",
              "  'text': 'secondary outcome measures included the western ontario and mcmaster universities osteoarthritis index scores , patient global assessment ( pga ) of the severity of knee oa , and @-min walk distance ( @mwd ) .',\n",
              "  'total_lines': 11},\n",
              " {'line_number': 5,\n",
              "  'target': 'METHODS',\n",
              "  'text': 'serum levels of interleukin @ ( il-@ ) , il-@ , tumor necrosis factor ( tnf ) - , and high-sensitivity c-reactive protein ( hscrp ) were measured .',\n",
              "  'total_lines': 11},\n",
              " {'line_number': 6,\n",
              "  'target': 'RESULTS',\n",
              "  'text': 'there was a clinically relevant reduction in the intervention group compared to the placebo group for knee pain , physical function , pga , and @mwd at @ weeks .',\n",
              "  'total_lines': 11},\n",
              " {'line_number': 7,\n",
              "  'target': 'RESULTS',\n",
              "  'text': 'the mean difference between treatment arms ( @ % ci ) was @ ( @-@ @ ) , p < @ ; @ ( @-@ @ ) , p < @ ; @ ( @-@ @ ) , p < @ ; and @ ( @-@ @ ) , p < @ , respectively .',\n",
              "  'total_lines': 11},\n",
              " {'line_number': 8,\n",
              "  'target': 'RESULTS',\n",
              "  'text': 'further , there was a clinically relevant reduction in the serum levels of il-@ , il-@ , tnf - , and hscrp at @ weeks in the intervention group when compared to the placebo group .',\n",
              "  'total_lines': 11},\n",
              " {'line_number': 9,\n",
              "  'target': 'RESULTS',\n",
              "  'text': 'these differences remained significant at @ weeks .',\n",
              "  'total_lines': 11},\n",
              " {'line_number': 10,\n",
              "  'target': 'RESULTS',\n",
              "  'text': 'the outcome measures in rheumatology clinical trials-osteoarthritis research society international responder rate was @ % in the intervention group and @ % in the placebo group ( p < @ ) .',\n",
              "  'total_lines': 11},\n",
              " {'line_number': 11,\n",
              "  'target': 'CONCLUSIONS',\n",
              "  'text': 'low-dose oral prednisolone had both a short-term and a longer sustained effect resulting in less knee pain , better physical function , and attenuation of systemic inflammation in older patients with knee oa ( clinicaltrials.gov identifier nct@ ) .',\n",
              "  'total_lines': 11},\n",
              " {'line_number': 0,\n",
              "  'target': 'BACKGROUND',\n",
              "  'text': 'emotional eating is associated with overeating and the development of obesity .',\n",
              "  'total_lines': 10},\n",
              " {'line_number': 1,\n",
              "  'target': 'BACKGROUND',\n",
              "  'text': 'yet , empirical evidence for individual ( trait ) differences in emotional eating and cognitive mechanisms that contribute to eating during sad mood remain equivocal .',\n",
              "  'total_lines': 10}]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 12
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "hCL4kIq2-NVm"
      },
      "source": [
        "Now that our data is the format of a list of dictionaries, how about we trun it into a DataFrame to further visualize it?"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 478
        },
        "id": "NTCtj_mg9Zni",
        "outputId": "d3f6fb68-40db-49ad-e0e4-cc9288d9ab0a"
      },
      "source": [
        "import pandas as pd\n",
        "train_df = pd.DataFrame(train_samples)\n",
        "val_df = pd.DataFrame(val_samples)\n",
        "test_df = pd.DataFrame(test_samples)\n",
        "train_df.head(14)"
      ],
      "execution_count": 13,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>target</th>\n",
              "      <th>text</th>\n",
              "      <th>line_number</th>\n",
              "      <th>total_lines</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>OBJECTIVE</td>\n",
              "      <td>to investigate the efficacy of @ weeks of dail...</td>\n",
              "      <td>0</td>\n",
              "      <td>11</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>METHODS</td>\n",
              "      <td>a total of @ patients with primary knee oa wer...</td>\n",
              "      <td>1</td>\n",
              "      <td>11</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>METHODS</td>\n",
              "      <td>outcome measures included pain reduction and i...</td>\n",
              "      <td>2</td>\n",
              "      <td>11</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>METHODS</td>\n",
              "      <td>pain was assessed using the visual analog pain...</td>\n",
              "      <td>3</td>\n",
              "      <td>11</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>METHODS</td>\n",
              "      <td>secondary outcome measures included the wester...</td>\n",
              "      <td>4</td>\n",
              "      <td>11</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>5</th>\n",
              "      <td>METHODS</td>\n",
              "      <td>serum levels of interleukin @ ( il-@ ) , il-@ ...</td>\n",
              "      <td>5</td>\n",
              "      <td>11</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>6</th>\n",
              "      <td>RESULTS</td>\n",
              "      <td>there was a clinically relevant reduction in t...</td>\n",
              "      <td>6</td>\n",
              "      <td>11</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>7</th>\n",
              "      <td>RESULTS</td>\n",
              "      <td>the mean difference between treatment arms ( @...</td>\n",
              "      <td>7</td>\n",
              "      <td>11</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>8</th>\n",
              "      <td>RESULTS</td>\n",
              "      <td>further , there was a clinically relevant redu...</td>\n",
              "      <td>8</td>\n",
              "      <td>11</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>9</th>\n",
              "      <td>RESULTS</td>\n",
              "      <td>these differences remained significant at @ we...</td>\n",
              "      <td>9</td>\n",
              "      <td>11</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>10</th>\n",
              "      <td>RESULTS</td>\n",
              "      <td>the outcome measures in rheumatology clinical ...</td>\n",
              "      <td>10</td>\n",
              "      <td>11</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>11</th>\n",
              "      <td>CONCLUSIONS</td>\n",
              "      <td>low-dose oral prednisolone had both a short-te...</td>\n",
              "      <td>11</td>\n",
              "      <td>11</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>12</th>\n",
              "      <td>BACKGROUND</td>\n",
              "      <td>emotional eating is associated with overeating...</td>\n",
              "      <td>0</td>\n",
              "      <td>10</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>13</th>\n",
              "      <td>BACKGROUND</td>\n",
              "      <td>yet , empirical evidence for individual ( trai...</td>\n",
              "      <td>1</td>\n",
              "      <td>10</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "         target  ... total_lines\n",
              "0     OBJECTIVE  ...          11\n",
              "1       METHODS  ...          11\n",
              "2       METHODS  ...          11\n",
              "3       METHODS  ...          11\n",
              "4       METHODS  ...          11\n",
              "5       METHODS  ...          11\n",
              "6       RESULTS  ...          11\n",
              "7       RESULTS  ...          11\n",
              "8       RESULTS  ...          11\n",
              "9       RESULTS  ...          11\n",
              "10      RESULTS  ...          11\n",
              "11  CONCLUSIONS  ...          11\n",
              "12   BACKGROUND  ...          10\n",
              "13   BACKGROUND  ...          10\n",
              "\n",
              "[14 rows x 4 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 13
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "p6GLJO8N-c5k",
        "outputId": "4a293a1a-4dad-4dc5-9c61-c041d50ef0e7"
      },
      "source": [
        "# Distribution of labels in training data\n",
        "train_df.target.value_counts()"
      ],
      "execution_count": 14,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "METHODS        59353\n",
              "RESULTS        57953\n",
              "CONCLUSIONS    27168\n",
              "BACKGROUND     21727\n",
              "OBJECTIVE      13839\n",
              "Name: target, dtype: int64"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 14
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 267
        },
        "id": "azHLUspM-0FQ",
        "outputId": "83363280-674b-4031-b593-488ce5f3d90d"
      },
      "source": [
        "# Let's check the length of different lines\n",
        "train_df.total_lines.plot.hist(); "
      ],
      "execution_count": 15,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "qU_ffnHa_CSn"
      },
      "source": [
        "### Get lists of sentences"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "FoNLpCOv_PUU",
        "outputId": "12003aac-afba-4e73-af7c-6ac72078a989"
      },
      "source": [
        "# Convert abstract text lines into lists\n",
        "train_sentences = train_df[\"text\"].tolist()\n",
        "val_sentences = val_df[\"text\"].tolist()\n",
        "test_sentences = test_df[\"text\"].tolist()\n",
        "len(train_sentences), len(val_sentences), len(test_sentences)"
      ],
      "execution_count": 16,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(180040, 30212, 30135)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 16
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "ZE4_-2TM_doI",
        "outputId": "355b83a4-3cca-42f0-f3df-81b12d994153"
      },
      "source": [
        "# View the 10 lines of training sentences\n",
        "train_sentences[:10]"
      ],
      "execution_count": 17,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "['to investigate the efficacy of @ weeks of daily low-dose oral prednisolone in improving pain , mobility , and systemic low-grade inflammation in the short term and whether the effect would be sustained at @ weeks in older adults with moderate to severe knee osteoarthritis ( oa ) .',\n",
              " 'a total of @ patients with primary knee oa were randomized @:@ ; @ received @ mg/day of prednisolone and @ received placebo for @ weeks .',\n",
              " 'outcome measures included pain reduction and improvement in function scores and systemic inflammation markers .',\n",
              " 'pain was assessed using the visual analog pain scale ( @-@ mm ) .',\n",
              " 'secondary outcome measures included the western ontario and mcmaster universities osteoarthritis index scores , patient global assessment ( pga ) of the severity of knee oa , and @-min walk distance ( @mwd ) .',\n",
              " 'serum levels of interleukin @ ( il-@ ) , il-@ , tumor necrosis factor ( tnf ) - , and high-sensitivity c-reactive protein ( hscrp ) were measured .',\n",
              " 'there was a clinically relevant reduction in the intervention group compared to the placebo group for knee pain , physical function , pga , and @mwd at @ weeks .',\n",
              " 'the mean difference between treatment arms ( @ % ci ) was @ ( @-@ @ ) , p < @ ; @ ( @-@ @ ) , p < @ ; @ ( @-@ @ ) , p < @ ; and @ ( @-@ @ ) , p < @ , respectively .',\n",
              " 'further , there was a clinically relevant reduction in the serum levels of il-@ , il-@ , tnf - , and hscrp at @ weeks in the intervention group when compared to the placebo group .',\n",
              " 'these differences remained significant at @ weeks .']"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 17
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "MlGRfffJ_iTU"
      },
      "source": [
        "## Make numeric labels (ML models require numeric labels)"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "0RhLpxOHAecn",
        "outputId": "ca48713d-5efc-464c-a21d-2b2d658db293"
      },
      "source": [
        "# One hot encode labels\n",
        "from sklearn.preprocessing import OneHotEncoder\n",
        "one_hot_encoder = OneHotEncoder(sparse=False) # we want non-sparse matrix\n",
        "train_labels_one_hot = one_hot_encoder.fit_transform(train_df[\"target\"].to_numpy().reshape(-1, 1))\n",
        "val_labels_one_hot = one_hot_encoder.transform(val_df[\"target\"].to_numpy().reshape(-1, 1))\n",
        "test_labels_one_hot = one_hot_encoder.transform(test_df[\"target\"].to_numpy().reshape(-1, 1))\n",
        "\n",
        "# check what one hot encoded labels look like\n",
        "train_labels_one_hot"
      ],
      "execution_count": 18,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([[0., 0., 0., 1., 0.],\n",
              "       [0., 0., 1., 0., 0.],\n",
              "       [0., 0., 1., 0., 0.],\n",
              "       ...,\n",
              "       [0., 0., 0., 0., 1.],\n",
              "       [0., 1., 0., 0., 0.],\n",
              "       [0., 1., 0., 0., 0.]])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 18
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Lu2rFcCXCILU"
      },
      "source": [
        "### Label encode labels"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Qv8oHxAzBAWc",
        "outputId": "2ae1a784-471d-4be6-890e-a6cc14158032"
      },
      "source": [
        "# Extract labels (\"target\" columns) and encode them into integers\n",
        "from sklearn.preprocessing import LabelEncoder \n",
        "label_encoder = LabelEncoder()\n",
        "train_labels_encoded = label_encoder.fit_transform(train_df[\"target\"].to_numpy())\n",
        "val_labels_encoded = label_encoder.transform(val_df[\"target\"].to_numpy())\n",
        "test_label_encoded = label_encoder.transform(test_df[\"target\"].to_numpy())\n",
        "\n",
        "# check what training labels look like\n",
        "train_labels_encoded"
      ],
      "execution_count": 19,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([3, 2, 2, ..., 4, 1, 1])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 19
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "UK57K2kaCmwD",
        "outputId": "b127b871-ddcb-4820-a05e-0da0d6b7d556"
      },
      "source": [
        "# Get class names and number of classes from LabelEncoder instance\n",
        "num_classes = len(label_encoder.classes_)\n",
        "class_names = label_encoder.classes_\n",
        "num_classes, class_names"
      ],
      "execution_count": 20,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(5, array(['BACKGROUND', 'CONCLUSIONS', 'METHODS', 'OBJECTIVE', 'RESULTS'],\n",
              "       dtype=object))"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 20
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "s6p8kCO7D0ec"
      },
      "source": [
        "## Starting a series of modelling experiments...\n",
        "\n",
        "As usual, we're going to be trying out a bunch of different models and seeing which one works best.\n",
        "\n",
        "And as always, we're going to start with a baseline (TF-IDF Multinomial Naive Bayes classifier)."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Mv-me7Z2C7OQ"
      },
      "source": [
        "## Model 0: Getting a baseline\n",
        "\n",
        "A baseline model is an important first step in any series of modelling experiments.\n",
        "\n",
        "It sets the pace for the subsequent experiments.\n",
        "\n",
        "It should start with a simple model and later models (with increasing complexity) will try to beat it."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "VfBK5q2qEAWn",
        "outputId": "8756fb0d-4cbc-4d44-e4bf-db063ea9d573"
      },
      "source": [
        "from sklearn.feature_extraction.text import TfidfVectorizer\n",
        "from sklearn.naive_bayes import MultinomialNB\n",
        "from sklearn.pipeline import Pipeline\n",
        "\n",
        "# Create a pipeline\n",
        "model_0 = Pipeline([\n",
        "  (\"tf-idf\", TfidfVectorizer()),\n",
        "  (\"clf\", MultinomialNB())\n",
        "])\n",
        "\n",
        "# Fit the pipeline to the training data\n",
        "model_0.fit(X=train_sentences,\n",
        "            y=train_labels_encoded)"
      ],
      "execution_count": 21,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "Pipeline(memory=None,\n",
              "         steps=[('tf-idf',\n",
              "                 TfidfVectorizer(analyzer='word', binary=False,\n",
              "                                 decode_error='strict',\n",
              "                                 dtype=<class 'numpy.float64'>,\n",
              "                                 encoding='utf-8', input='content',\n",
              "                                 lowercase=True, max_df=1.0, max_features=None,\n",
              "                                 min_df=1, ngram_range=(1, 1), norm='l2',\n",
              "                                 preprocessor=None, smooth_idf=True,\n",
              "                                 stop_words=None, strip_accents=None,\n",
              "                                 sublinear_tf=False,\n",
              "                                 token_pattern='(?u)\\\\b\\\\w\\\\w+\\\\b',\n",
              "                                 tokenizer=None, use_idf=True,\n",
              "                                 vocabulary=None)),\n",
              "                ('clf',\n",
              "                 MultinomialNB(alpha=1.0, class_prior=None, fit_prior=True))],\n",
              "         verbose=False)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 21
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Gbr5uASgEw7a",
        "outputId": "ac95d013-1470-4248-bfe9-b80f50fc5cd1"
      },
      "source": [
        "# Evaluate baseline model on validation dataset\n",
        "model_0.score(X=val_sentences,\n",
        "              y=val_labels_encoded)"
      ],
      "execution_count": 22,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "0.7218323844829869"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 22
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Uf2FJDM5E4wo",
        "outputId": "ba330468-f1be-4ccd-e296-f2206388f604"
      },
      "source": [
        "# Make predictions using our baseline model\n",
        "baseline_preds = model_0.predict(val_sentences)\n",
        "baseline_preds"
      ],
      "execution_count": 23,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([4, 1, 3, ..., 4, 4, 1])"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 23
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "30JiFv7QFJTy"
      },
      "source": [
        "### Download helper function script\n",
        "\n",
        "In the previous module, we wrote a function to compare predictions across different metrics (accuracy, precision, recall and f1) and rather than rewriting it here, let's download it from our helper function script: https://raw.githubusercontent.com/mrdbourke/tensorflow-deep-learning/main/extras/helper_functions.py"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "zj9Q7hiiFWOj",
        "outputId": "e87bc4e9-951d-4985-ad4c-4ba1e6d9b5bb"
      },
      "source": [
        "!wget https://raw.githubusercontent.com/mrdbourke/tensorflow-deep-learning/main/extras/helper_functions.py "
      ],
      "execution_count": 24,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "--2021-04-22 04:49:19--  https://raw.githubusercontent.com/mrdbourke/tensorflow-deep-learning/main/extras/helper_functions.py\n",
            "Resolving raw.githubusercontent.com (raw.githubusercontent.com)... 185.199.108.133, 185.199.109.133, 185.199.110.133, ...\n",
            "Connecting to raw.githubusercontent.com (raw.githubusercontent.com)|185.199.108.133|:443... connected.\n",
            "HTTP request sent, awaiting response... 200 OK\n",
            "Length: 10246 (10K) [text/plain]\n",
            "Saving to: ‘helper_functions.py’\n",
            "\n",
            "\rhelper_functions.py   0%[                    ]       0  --.-KB/s               \rhelper_functions.py 100%[===================>]  10.01K  --.-KB/s    in 0s      \n",
            "\n",
            "2021-04-22 04:49:19 (116 MB/s) - ‘helper_functions.py’ saved [10246/10246]\n",
            "\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "8kAJzuMwFk_j"
      },
      "source": [
        "from helper_functions import calculate_results"
      ],
      "execution_count": 25,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "GhYXeadvFoAC",
        "outputId": "07e0f21c-a52e-4ee0-de88-5df7d0880b8e"
      },
      "source": [
        "# Calculate baseline results\n",
        "baseline_results = calculate_results(y_true=val_labels_encoded,\n",
        "                                     y_pred=baseline_preds)\n",
        "baseline_results"
      ],
      "execution_count": 26,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "{'accuracy': 72.1832384482987,\n",
              " 'f1': 0.6989250353450294,\n",
              " 'precision': 0.7186466952323352,\n",
              " 'recall': 0.7218323844829869}"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 26
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Zskqb-09F7u2"
      },
      "source": [
        "## Preparing our data (the text) for deep sequence models\n",
        "\n",
        "Before we start building deeper models, we've got to create vectorization and embedding layers."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "TNpr2QJ0_eRV"
      },
      "source": [
        "import numpy as np\n",
        "import tensorflow as tf\n",
        "from tensorflow.keras import layers"
      ],
      "execution_count": 27,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Z73ZX2tT_1Jq",
        "outputId": "fa1acb5c-a88c-48d3-df58-3e51883f84fd"
      },
      "source": [
        "train_sentences[:10]"
      ],
      "execution_count": 28,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "['to investigate the efficacy of @ weeks of daily low-dose oral prednisolone in improving pain , mobility , and systemic low-grade inflammation in the short term and whether the effect would be sustained at @ weeks in older adults with moderate to severe knee osteoarthritis ( oa ) .',\n",
              " 'a total of @ patients with primary knee oa were randomized @:@ ; @ received @ mg/day of prednisolone and @ received placebo for @ weeks .',\n",
              " 'outcome measures included pain reduction and improvement in function scores and systemic inflammation markers .',\n",
              " 'pain was assessed using the visual analog pain scale ( @-@ mm ) .',\n",
              " 'secondary outcome measures included the western ontario and mcmaster universities osteoarthritis index scores , patient global assessment ( pga ) of the severity of knee oa , and @-min walk distance ( @mwd ) .',\n",
              " 'serum levels of interleukin @ ( il-@ ) , il-@ , tumor necrosis factor ( tnf ) - , and high-sensitivity c-reactive protein ( hscrp ) were measured .',\n",
              " 'there was a clinically relevant reduction in the intervention group compared to the placebo group for knee pain , physical function , pga , and @mwd at @ weeks .',\n",
              " 'the mean difference between treatment arms ( @ % ci ) was @ ( @-@ @ ) , p < @ ; @ ( @-@ @ ) , p < @ ; @ ( @-@ @ ) , p < @ ; and @ ( @-@ @ ) , p < @ , respectively .',\n",
              " 'further , there was a clinically relevant reduction in the serum levels of il-@ , il-@ , tnf - , and hscrp at @ weeks in the intervention group when compared to the placebo group .',\n",
              " 'these differences remained significant at @ weeks .']"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 28
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "TNxnne4n_jAl",
        "outputId": "4f2893a5-4e1e-4828-d1b3-e47e25a6309d"
      },
      "source": [
        "# How long is each sentence on average?\n",
        "sent_lens = [len(sentence.split()) for sentence in train_sentences]\n",
        "avg_sent_len = np.mean(sent_lens)\n",
        "avg_sent_len"
      ],
      "execution_count": 29,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "26.338269273494777"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 29
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 265
        },
        "id": "XJP1CZCR_-oA",
        "outputId": "7dd4adb0-6ae8-4f08-9eb4-8dc155bb68ca"
      },
      "source": [
        "# What's the distribution look like?\n",
        "import matplotlib.pyplot as plt\n",
        "plt.hist(sent_lens, bins=20);"
      ],
      "execution_count": 30,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "or5Rq-AVAUjL",
        "outputId": "014a8360-17bc-419e-992b-bce7ba1ad7e7"
      },
      "source": [
        "# How long of a setnence lenght covers 95% of examples?\n",
        "output_seq_len = int(np.percentile(sent_lens, 95))\n",
        "output_seq_len"
      ],
      "execution_count": 31,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "55"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 31
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "vu37GRdzA_Vs",
        "outputId": "42fb1e5d-464b-46f0-d5cd-5724a953ac17"
      },
      "source": [
        "# Maximum sequence length in the training set\n",
        "max(sent_lens)"
      ],
      "execution_count": 32,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "296"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 32
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "I-Of2Sq-BMwL"
      },
      "source": [
        "### Create text vectorizer layer\n",
        "\n",
        "We want to make a layer which maps our texts from words to numbers."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Ee3bTil5B3_P"
      },
      "source": [
        "# How many words are in our vocab? (taken from table 2 in: https://arxiv.org/pdf/1710.06071.pdf)\n",
        "max_tokens = 68000"
      ],
      "execution_count": 33,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "_fO6soCTCw_K"
      },
      "source": [
        "# Create text vectorizer\n",
        "from tensorflow.keras.layers.experimental.preprocessing import TextVectorization\n",
        "\n",
        "text_vectorizer = TextVectorization(max_tokens=max_tokens, # number of words in vocabulary\n",
        "                                    output_sequence_length=output_seq_len) # desired output length of vectorized sequences"
      ],
      "execution_count": 34,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Qx8M8l0jDPYY"
      },
      "source": [
        "# Adapt text vectorizer to training sentences\n",
        "text_vectorizer.adapt(train_sentences)"
      ],
      "execution_count": 35,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "S6z00cuTDbv0",
        "outputId": "8020ae09-8142-45f7-c2b7-8235096c9254"
      },
      "source": [
        "# Test out text vectorizer on random sentences\n",
        "import random\n",
        "target_sentence = random.choice(train_sentences)\n",
        "print(f\"Text:\\n{target_sentence}\")\n",
        "print(f\"\\nLength of text: {len(target_sentence.split())}\")\n",
        "print(f\"\\nVectorized text: {text_vectorizer([target_sentence])}\")"
      ],
      "execution_count": 36,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Text:\n",
            "low-dose cta with mbir enables up to @ % dose reduction as compared with cta performed with asir while maintaining diagnostic adequacy for cta surveillance of patients who have undergone evar of a thoracic or abdominal aortic aneurysm .\n",
            "\n",
            "Length of text: 39\n",
            "\n",
            "Vectorized text: [[ 1127  3605     7 16941  7536   303     6   131   169    25    34     7\n",
            "   3605   153     7  7586   258  2278   712  6716    11  3605  2815     4\n",
            "     12    67    99  3273  5844     4     8  2090    16   743  1085  4049\n",
            "      0     0     0     0     0     0     0     0     0     0     0     0\n",
            "      0     0     0     0     0     0     0]]\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "ntrnxgf3D271",
        "outputId": "d05c333f-682e-440e-b8d7-446fde9130a1"
      },
      "source": [
        "# How many words in our training vocabulary\n",
        "rct_20k_text_vocab = text_vectorizer.get_vocabulary()\n",
        "print(f\"Number of words in vocab: {len(rct_20k_text_vocab)}\")\n",
        "print(f\"Most common words in the vocab: {rct_20k_text_vocab[:5]}\")\n",
        "print(f\"Least common words in the vocab: {rct_20k_text_vocab[-5:]}\")"
      ],
      "execution_count": 37,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Number of words in vocab: 64841\n",
            "Most common words in the vocab: ['', '[UNK]', 'the', 'and', 'of']\n",
            "Least common words in the vocab: ['aainduced', 'aaigroup', 'aachener', 'aachen', 'aaacp']\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "k0BTNEyqEmxY",
        "outputId": "30ec3736-0872-4062-a781-2bf382beec4e"
      },
      "source": [
        "# Get the config of our text vectorizer\n",
        "text_vectorizer.get_config()"
      ],
      "execution_count": 38,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "{'dtype': 'string',\n",
              " 'max_tokens': 68000,\n",
              " 'name': 'text_vectorization',\n",
              " 'ngrams': None,\n",
              " 'output_mode': 'int',\n",
              " 'output_sequence_length': 55,\n",
              " 'pad_to_max_tokens': True,\n",
              " 'split': 'whitespace',\n",
              " 'standardize': 'lower_and_strip_punctuation',\n",
              " 'trainable': True}"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 38
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "bwmm7KmhE3HH"
      },
      "source": [
        "### Create custom text embedding"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "QVGTwoHbFfjm"
      },
      "source": [
        "# Create token embedding layer\n",
        "token_embed = layers.Embedding(input_dim=len(rct_20k_text_vocab), # length of vocabulary\n",
        "                               output_dim=128, # Note: different embedding sizes result in drastically differnt numbers of parameters to train\n",
        "                               mask_zero=True, # use masking to handle variable sequence lengths (save space),\n",
        "                               name=\"token_embedding\")"
      ],
      "execution_count": 39,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "vcNSOtX1GjXJ",
        "outputId": "27404fec-45a0-4aac-c0bf-2a8926605bf3"
      },
      "source": [
        "# Show example embedding\n",
        "print(f\"Sentence before vectorization:\\n {target_sentence}\\n\")\n",
        "vectorized_sentence = text_vectorizer([target_sentence])\n",
        "print(f\"Sentence after vectorization (before embedding):\\n {vectorized_sentence}\\n\")\n",
        "embedded_sentence = token_embed(vectorized_sentence)\n",
        "print(f\"Sentence after embedding:\\n {embedded_sentence}\\n\")\n",
        "print(f\"Embedded sentence shape: {embedded_sentence.shape}\")"
      ],
      "execution_count": 40,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Sentence before vectorization:\n",
            " low-dose cta with mbir enables up to @ % dose reduction as compared with cta performed with asir while maintaining diagnostic adequacy for cta surveillance of patients who have undergone evar of a thoracic or abdominal aortic aneurysm .\n",
            "\n",
            "Sentence after vectorization (before embedding):\n",
            " [[ 1127  3605     7 16941  7536   303     6   131   169    25    34     7\n",
            "   3605   153     7  7586   258  2278   712  6716    11  3605  2815     4\n",
            "     12    67    99  3273  5844     4     8  2090    16   743  1085  4049\n",
            "      0     0     0     0     0     0     0     0     0     0     0     0\n",
            "      0     0     0     0     0     0     0]]\n",
            "\n",
            "Sentence after embedding:\n",
            " [[[-0.04802219 -0.01015962  0.00490223 ... -0.03261849  0.00812943\n",
            "    0.03043203]\n",
            "  [-0.02444483 -0.03071042  0.01460406 ... -0.00753552 -0.00617326\n",
            "    0.00294236]\n",
            "  [ 0.04589846  0.03967238  0.00963162 ...  0.00912216  0.03048303\n",
            "   -0.01298115]\n",
            "  ...\n",
            "  [-0.00760671 -0.01285071 -0.03756499 ... -0.02980448 -0.01311824\n",
            "   -0.00745289]\n",
            "  [-0.00760671 -0.01285071 -0.03756499 ... -0.02980448 -0.01311824\n",
            "   -0.00745289]\n",
            "  [-0.00760671 -0.01285071 -0.03756499 ... -0.02980448 -0.01311824\n",
            "   -0.00745289]]]\n",
            "\n",
            "Embedded sentence shape: (1, 55, 128)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "Hcmcpt3MHBcK"
      },
      "source": [
        "## Creating datasets (making sure our data loads as fast as possible)\n",
        "\n",
        "We're going to setup our data to run as fast as possible with the TensorFlow tf.data API, many of the steps here are discussed at length in these two resources:\n",
        "* https://www.tensorflow.org/guide/data_performance\n",
        "* https://www.tensorflow.org/guide/data"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "5litPPbBIE1l",
        "outputId": "aee8222c-c538-4806-e939-72feca409fe6"
      },
      "source": [
        "# Turn our data into TensorFlow Datasets\n",
        "train_dataset = tf.data.Dataset.from_tensor_slices((train_sentences, train_labels_one_hot))\n",
        "valid_dataset = tf.data.Dataset.from_tensor_slices((val_sentences, val_labels_one_hot))\n",
        "test_dataset = tf.data.Dataset.from_tensor_slices((test_sentences, test_labels_one_hot))\n",
        "\n",
        "train_dataset"
      ],
      "execution_count": 41,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<TensorSliceDataset shapes: ((), (5,)), types: (tf.string, tf.float64)>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 41
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "KwrVU_qEIxk9",
        "outputId": "ec81be4d-60a7-44a4-8f4f-b3783de4c3d8"
      },
      "source": [
        "# Take the TensorSliceDataset's and turn them into prefected datasets\n",
        "train_dataset = train_dataset.batch(32).prefetch(tf.data.AUTOTUNE)\n",
        "valid_dataset = valid_dataset.batch(32).prefetch(tf.data.AUTOTUNE)\n",
        "test_dataset = test_dataset.batch(32).prefetch(tf.data.AUTOTUNE)\n",
        "\n",
        "train_dataset"
      ],
      "execution_count": 42,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<PrefetchDataset shapes: ((None,), (None, 5)), types: (tf.string, tf.float64)>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 42
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "OEaZV1rfI8S9"
      },
      "source": [
        "## Model 1: Conv1D with token embeddings"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "DgOdBx2pLqav"
      },
      "source": [
        "# Create 1D conv model to process sequences\n",
        "inputs = layers.Input(shape=(1,), dtype=tf.string)\n",
        "text_vectors = text_vectorizer(inputs) # vectorize text inputs\n",
        "token_embeddings = token_embed(text_vectors) # create embedding\n",
        "x = layers.Conv1D(64, kernel_size=5, padding=\"same\", activation=\"relu\")(token_embeddings)\n",
        "x = layers.GlobalAveragePooling1D()(x) # condense the output of our feature vector from conv layer\n",
        "outputs = layers.Dense(num_classes, activation=\"softmax\")(x)\n",
        "model_1 = tf.keras.Model(inputs, outputs)\n",
        "\n",
        "# Compile\n",
        "model_1.compile(loss=\"categorical_crossentropy\",\n",
        "                optimizer=tf.keras.optimizers.Adam(),\n",
        "                metrics=[\"accuracy\"])"
      ],
      "execution_count": 43,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "SHqNNPCKMwm_",
        "outputId": "232b0dba-6c9d-4aae-fe72-92a73a2c4002"
      },
      "source": [
        "model_1.summary()"
      ],
      "execution_count": 44,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Model: \"model\"\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "input_1 (InputLayer)         [(None, 1)]               0         \n",
            "_________________________________________________________________\n",
            "text_vectorization (TextVect (None, 55)                0         \n",
            "_________________________________________________________________\n",
            "token_embedding (Embedding)  (None, 55, 128)           8299648   \n",
            "_________________________________________________________________\n",
            "conv1d (Conv1D)              (None, 55, 64)            41024     \n",
            "_________________________________________________________________\n",
            "global_average_pooling1d (Gl (None, 64)                0         \n",
            "_________________________________________________________________\n",
            "dense (Dense)                (None, 5)                 325       \n",
            "=================================================================\n",
            "Total params: 8,340,997\n",
            "Trainable params: 8,340,997\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "CbWmijwRNH5-",
        "outputId": "8707b603-7aca-4b52-ae5f-1312dfd78323"
      },
      "source": [
        "train_dataset"
      ],
      "execution_count": 45,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<PrefetchDataset shapes: ((None,), (None, 5)), types: (tf.string, tf.float64)>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 45
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "bP5hDW6NNR4A",
        "outputId": "b5926345-272c-478c-cbb3-05d62bab38ac"
      },
      "source": [
        "len(train_dataset)"
      ],
      "execution_count": 46,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "5627"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 46
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "dHSMjFKkNUpv",
        "outputId": "9c33e76e-e024-408a-c99c-304ebb01ca44"
      },
      "source": [
        "5627*32"
      ],
      "execution_count": 47,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "180064"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 47
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "CbKf7Qn_Mx1y",
        "outputId": "3a23268e-e457-4ce5-bd49-282aa7e58c9d"
      },
      "source": [
        "# Fit the model\n",
        "history_model_1 = model_1.fit(train_dataset,\n",
        "                              steps_per_epoch=int(0.1*len(train_dataset)),\n",
        "                              epochs=3,\n",
        "                              validation_data=valid_dataset,\n",
        "                              validation_steps=int(0.1 * len(valid_dataset))) # only validate on 10% of batches"
      ],
      "execution_count": 48,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Epoch 1/3\n",
            "562/562 [==============================] - 77s 80ms/step - loss: 1.1628 - accuracy: 0.5238 - val_loss: 0.6815 - val_accuracy: 0.7420\n",
            "Epoch 2/3\n",
            "562/562 [==============================] - 44s 79ms/step - loss: 0.6757 - accuracy: 0.7456 - val_loss: 0.6284 - val_accuracy: 0.7713\n",
            "Epoch 3/3\n",
            "562/562 [==============================] - 44s 79ms/step - loss: 0.6205 - accuracy: 0.7710 - val_loss: 0.5961 - val_accuracy: 0.7859\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "2VELpV9BN5gt",
        "outputId": "d1d872cc-7914-45f6-a897-6234ffa9bbcc"
      },
      "source": [
        "# Evalaute on whole validation dataset\n",
        "model_1.evaluate(valid_dataset)"
      ],
      "execution_count": 49,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "945/945 [==============================] - 3s 3ms/step - loss: 0.5975 - accuracy: 0.7861\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[0.5975042581558228, 0.7860783934593201]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 49
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "LiDCjkoFOwv4",
        "outputId": "b245a6c0-54fc-48c4-a7ba-ba46307b7625"
      },
      "source": [
        "# Make predictions (our model predicts prediction probabilities for each class)\n",
        "model_1_pred_probs = model_1.predict(valid_dataset)\n",
        "model_1_pred_probs, model_1_pred_probs.shape"
      ],
      "execution_count": 50,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(array([[4.1910395e-01, 1.8863903e-01, 9.1777198e-02, 2.6551035e-01,\n",
              "         3.4969445e-02],\n",
              "        [4.5355678e-01, 2.8629509e-01, 1.4822427e-02, 2.3661332e-01,\n",
              "         8.7124174e-03],\n",
              "        [1.6295701e-01, 6.5065208e-03, 2.2286533e-03, 8.2823873e-01,\n",
              "         6.9114736e-05],\n",
              "        ...,\n",
              "        [6.2707500e-06, 5.8430753e-04, 9.4748056e-04, 5.1592651e-06,\n",
              "         9.9845684e-01],\n",
              "        [5.8549751e-02, 4.8329592e-01, 9.3605481e-02, 6.5658920e-02,\n",
              "         2.9888996e-01],\n",
              "        [1.6351694e-01, 6.8997830e-01, 6.0407817e-02, 3.7280351e-02,\n",
              "         4.8816562e-02]], dtype=float32), (30212, 5))"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 50
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "chdlNyJDO8vD",
        "outputId": "025eab3c-c62d-4a3a-f961-203b60105060"
      },
      "source": [
        "# Convert pred probs to classes\n",
        "model_1_preds = tf.argmax(model_1_pred_probs, axis=1)\n",
        "model_1_preds"
      ],
      "execution_count": 51,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<tf.Tensor: shape=(30212,), dtype=int64, numpy=array([0, 0, 3, ..., 4, 1, 1])>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 51
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "gM88uKd8PUKe",
        "outputId": "d7bcdad1-43de-4311-9137-ebdf0cd35df8"
      },
      "source": [
        "# Calculate model_1 results\n",
        "model_1_results = calculate_results(y_true=val_labels_encoded,\n",
        "                                    y_pred=model_1_preds)\n",
        "model_1_results"
      ],
      "execution_count": 52,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "{'accuracy': 78.60783794518734,\n",
              " 'f1': 0.783433907135443,\n",
              " 'precision': 0.7829343676825903,\n",
              " 'recall': 0.7860783794518734}"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 52
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "v6seTDYrPhIm"
      },
      "source": [
        "## Model 2: Feature extraction with pretrained token embeddings\n",
        "\n",
        "Now lets use pretrained word embeddings from TensorFlow Hub, more specifically the universal sentence encoder (USE): https://tfhub.dev/google/universal-sentence-encoder/4\n",
        "\n",
        "The paper originally used GloVe embeddings, however, we're going to stick with the later created USE pretrained embeddings."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "iWgDw8BCvr8-"
      },
      "source": [
        "# Download pretrained TensorFlow Hub USE\n",
        "import tensorflow_hub as hub\n",
        "tf_hub_embedding_layer = hub.KerasLayer(\"https://tfhub.dev/google/universal-sentence-encoder/4\",\n",
        "                                        trainable=False,\n",
        "                                        name=\"universal_sentence_encoder\")"
      ],
      "execution_count": 53,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "x_S_AUXrxU4A",
        "outputId": "018565b5-743d-4be4-bd28-4a761aae11c5"
      },
      "source": [
        "# Test out the pretrained embedding on a random sentence \n",
        "random_train_sentence = random.choice(train_sentences)\n",
        "print(f\"Random sentence:\\n {random_train_sentence}\")\n",
        "use_embedded_sentence = tf_hub_embedding_layer([random_train_sentence])\n",
        "print(f\"Setence after embedding:\\n{use_embedded_sentence[0][:30]}\\n\")\n",
        "print(f\"Length of sentence embedding: {len(use_embedded_sentence[0])}\")"
      ],
      "execution_count": 54,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Random sentence:\n",
            " the exposure-adjusted ae incidence regardless of causality was similar in periods @ ( @ ) and @ ( @ ) .\n",
            "Setence after embedding:\n",
            "[ 0.01977038  0.02243362  0.0479229  -0.0386384   0.05246279 -0.05058708\n",
            " -0.02161773 -0.03075982  0.06465533  0.07680867  0.0704236  -0.04631586\n",
            "  0.04571636  0.03492888  0.05794131 -0.06503989 -0.0604578   0.00412879\n",
            "  0.07964838 -0.03614014  0.01125568  0.05893939 -0.01718411  0.04884404\n",
            "  0.00084615 -0.0066583  -0.01109742  0.0400309   0.00751991  0.06848188]\n",
            "\n",
            "Length of sentence embedding: 512\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "4TA22r9TxsZC"
      },
      "source": [
        "### Building and fitting an NLP feature extraction model using pretrained embeddings TensorFlow Hub"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "wTXAMJ8vykU3"
      },
      "source": [
        "# Define feature extraction model using TF Hub layer\n",
        "inputs = layers.Input(shape=[], dtype=tf.string)\n",
        "pretrained_embedding = tf_hub_embedding_layer(inputs) # tokenize text and create embedding of each sequence (512 long vector)\n",
        "x = layers.Dense(128, activation=\"relu\")(pretrained_embedding)\n",
        "# Note: you could add more layers here if you wanted to\n",
        "outputs = layers.Dense(num_classes, activation=\"softmax\")(x) # create the output layer\n",
        "model_2 = tf.keras.Model(inputs=inputs,\n",
        "                         outputs=outputs,\n",
        "                         name=\"model_2_USE_feature_extractor\")\n",
        "\n",
        "# Compile the model\n",
        "model_2.compile(loss=\"categorical_crossentropy\",\n",
        "                optimizer=tf.keras.optimizers.Adam(),\n",
        "                metrics=[\"accuracy\"])"
      ],
      "execution_count": 55,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "dT9DBshJzgaJ",
        "outputId": "37e84421-7f7c-4fdc-9199-64ec368b1dc4"
      },
      "source": [
        "model_2.summary()"
      ],
      "execution_count": 56,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Model: \"model_2_USE_feature_extractor\"\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "input_2 (InputLayer)         [(None,)]                 0         \n",
            "_________________________________________________________________\n",
            "universal_sentence_encoder ( (None, 512)               256797824 \n",
            "_________________________________________________________________\n",
            "dense_1 (Dense)              (None, 128)               65664     \n",
            "_________________________________________________________________\n",
            "dense_2 (Dense)              (None, 5)                 645       \n",
            "=================================================================\n",
            "Total params: 256,864,133\n",
            "Trainable params: 66,309\n",
            "Non-trainable params: 256,797,824\n",
            "_________________________________________________________________\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "AgRxloyIzytQ",
        "outputId": "8394d1f6-f7ea-4548-df97-4096571c3e2b"
      },
      "source": [
        "train_dataset"
      ],
      "execution_count": 57,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<PrefetchDataset shapes: ((None,), (None, 5)), types: (tf.string, tf.float64)>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 57
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "m0OdxQuMzhs2",
        "outputId": "572f0510-61d4-47a5-f985-bab074ce2730"
      },
      "source": [
        "# Fit model_2 to the data\n",
        "history_model_2 = model_2.fit(train_dataset,\n",
        "                              epochs=3,\n",
        "                              steps_per_epoch=int(0.1 * len(train_dataset)),\n",
        "                              validation_data=valid_dataset,\n",
        "                              validation_steps=int(0.1 * len(valid_dataset)))"
      ],
      "execution_count": 58,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Epoch 1/3\n",
            "562/562 [==============================] - 9s 12ms/step - loss: 1.0974 - accuracy: 0.5731 - val_loss: 0.7966 - val_accuracy: 0.6915\n",
            "Epoch 2/3\n",
            "562/562 [==============================] - 6s 11ms/step - loss: 0.7693 - accuracy: 0.7033 - val_loss: 0.7525 - val_accuracy: 0.7055\n",
            "Epoch 3/3\n",
            "562/562 [==============================] - 6s 11ms/step - loss: 0.7518 - accuracy: 0.7152 - val_loss: 0.7356 - val_accuracy: 0.7138\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "x5dY-silz_f8",
        "outputId": "05a4f0bd-bc97-43cd-a704-5ef245d8fee6"
      },
      "source": [
        "# Evaluate on the whole validation dataset\n",
        "model_2.evaluate(valid_dataset)"
      ],
      "execution_count": 59,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "945/945 [==============================] - 9s 9ms/step - loss: 0.7379 - accuracy: 0.7155\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[0.7378965616226196, 0.715510368347168]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 59
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "pWu1Bm2j0Tpk",
        "outputId": "cf42d3e3-fd0b-489f-d708-494a99c0c75b"
      },
      "source": [
        "# Make predictions with feature extraction model\n",
        "model_2_pred_probs = model_2.predict(valid_dataset)\n",
        "model_2_pred_probs"
      ],
      "execution_count": 60,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([[4.4057617e-01, 3.3733779e-01, 1.6672050e-03, 2.1242118e-01,\n",
              "        7.9976171e-03],\n",
              "       [3.4118232e-01, 4.9462339e-01, 2.5410841e-03, 1.5916388e-01,\n",
              "        2.4893212e-03],\n",
              "       [2.3585790e-01, 1.2996121e-01, 1.3848483e-02, 5.8221167e-01,\n",
              "        3.8120773e-02],\n",
              "       ...,\n",
              "       [1.6008025e-03, 4.8917751e-03, 5.1954009e-02, 7.6064188e-04,\n",
              "        9.4079280e-01],\n",
              "       [4.7978386e-03, 5.5189408e-02, 2.0356768e-01, 1.6417035e-03,\n",
              "        7.3480338e-01],\n",
              "       [1.9263166e-01, 2.7971533e-01, 4.7551993e-01, 7.0067351e-03,\n",
              "        4.5126289e-02]], dtype=float32)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 60
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Vzfq2OIJ0eRJ",
        "outputId": "c409f3f2-42cb-4c10-a642-2866a196d189"
      },
      "source": [
        "# Convert the prediction probabilities found with feature extraction model to labels\n",
        "model_2_preds = tf.argmax(model_2_pred_probs, axis=1)\n",
        "model_2_preds"
      ],
      "execution_count": 61,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<tf.Tensor: shape=(30212,), dtype=int64, numpy=array([0, 1, 3, ..., 4, 4, 2])>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 61
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "JHHOe6y00sLC",
        "outputId": "4ba6ee6a-6c34-4d65-9009-7da5e7e12cc9"
      },
      "source": [
        "# Calculate results from TF Hub pretrained embeddings results on val set\n",
        "model_2_results = calculate_results(y_true=val_labels_encoded,\n",
        "                                   y_pred=model_2_preds)\n",
        "model_2_results"
      ],
      "execution_count": 62,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "{'accuracy': 71.55103932212366,\n",
              " 'f1': 0.7125920229163828,\n",
              " 'precision': 0.7158553226406966,\n",
              " 'recall': 0.7155103932212366}"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 62
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "sqCUjgBQ05in"
      },
      "source": [
        "## Model 3: Conv1D with character embeddings\n",
        "\n",
        "The paper which we're replicating states they used a combination of token and character-level embeddings.\n",
        "\n",
        "Previously we've token-level embeddings but we'll need to do similar steps for characters if we want to use char-level embeddings. "
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "sNXfykyq2bG4"
      },
      "source": [
        "### Creating a character-level tokenizer"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "WMbyS0im3Bj6",
        "outputId": "a6a53834-464b-4197-bc1e-f5a489d44b36"
      },
      "source": [
        "train_sentences[:5]"
      ],
      "execution_count": 63,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "['to investigate the efficacy of @ weeks of daily low-dose oral prednisolone in improving pain , mobility , and systemic low-grade inflammation in the short term and whether the effect would be sustained at @ weeks in older adults with moderate to severe knee osteoarthritis ( oa ) .',\n",
              " 'a total of @ patients with primary knee oa were randomized @:@ ; @ received @ mg/day of prednisolone and @ received placebo for @ weeks .',\n",
              " 'outcome measures included pain reduction and improvement in function scores and systemic inflammation markers .',\n",
              " 'pain was assessed using the visual analog pain scale ( @-@ mm ) .',\n",
              " 'secondary outcome measures included the western ontario and mcmaster universities osteoarthritis index scores , patient global assessment ( pga ) of the severity of knee oa , and @-min walk distance ( @mwd ) .']"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 63
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 53
        },
        "id": "El3xYDhT3D_V",
        "outputId": "12fb355d-e4e7-42ac-a70b-7199a6de5230"
      },
      "source": [
        "# Make function to split sentences into characters\n",
        "def split_chars(text):\n",
        "  return \" \".join(list(text))\n",
        "\n",
        "# Text splitting non-character-level sequence into characters\n",
        "split_chars(random_train_sentence)"
      ],
      "execution_count": 64,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "string"
            },
            "text/plain": [
              "'t h e   e x p o s u r e - a d j u s t e d   a e   i n c i d e n c e   r e g a r d l e s s   o f   c a u s a l i t y   w a s   s i m i l a r   i n   p e r i o d s   @   (   @   )   a n d   @   (   @   )   .'"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 64
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Hygj6yxk3Oss",
        "outputId": "d4853d79-90de-4f89-d024-a78d420441d7"
      },
      "source": [
        "# Split sequence-level data splits into character-level data splits\n",
        "train_chars = [split_chars(sentence) for sentence in train_sentences]\n",
        "val_chars = [split_chars(sentence) for sentence in val_sentences]\n",
        "test_chars = [split_chars(sentence) for sentence in test_sentences]\n",
        "train_chars[:5]"
      ],
      "execution_count": 65,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "['t o   i n v e s t i g a t e   t h e   e f f i c a c y   o f   @   w e e k s   o f   d a i l y   l o w - d o s e   o r a l   p r e d n i s o l o n e   i n   i m p r o v i n g   p a i n   ,   m o b i l i t y   ,   a n d   s y s t e m i c   l o w - g r a d e   i n f l a m m a t i o n   i n   t h e   s h o r t   t e r m   a n d   w h e t h e r   t h e   e f f e c t   w o u l d   b e   s u s t a i n e d   a t   @   w e e k s   i n   o l d e r   a d u l t s   w i t h   m o d e r a t e   t o   s e v e r e   k n e e   o s t e o a r t h r i t i s   (   o a   )   .',\n",
              " 'a   t o t a l   o f   @   p a t i e n t s   w i t h   p r i m a r y   k n e e   o a   w e r e   r a n d o m i z e d   @ : @   ;   @   r e c e i v e d   @   m g / d a y   o f   p r e d n i s o l o n e   a n d   @   r e c e i v e d   p l a c e b o   f o r   @   w e e k s   .',\n",
              " 'o u t c o m e   m e a s u r e s   i n c l u d e d   p a i n   r e d u c t i o n   a n d   i m p r o v e m e n t   i n   f u n c t i o n   s c o r e s   a n d   s y s t e m i c   i n f l a m m a t i o n   m a r k e r s   .',\n",
              " 'p a i n   w a s   a s s e s s e d   u s i n g   t h e   v i s u a l   a n a l o g   p a i n   s c a l e   (   @ - @   m m   )   .',\n",
              " 's e c o n d a r y   o u t c o m e   m e a s u r e s   i n c l u d e d   t h e   w e s t e r n   o n t a r i o   a n d   m c m a s t e r   u n i v e r s i t i e s   o s t e o a r t h r i t i s   i n d e x   s c o r e s   ,   p a t i e n t   g l o b a l   a s s e s s m e n t   (   p g a   )   o f   t h e   s e v e r i t y   o f   k n e e   o a   ,   a n d   @ - m i n   w a l k   d i s t a n c e   (   @ m w d   )   .']"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 65
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "MXorSIE83obm",
        "outputId": "249696f2-aaf2-4048-dc40-528f24e68f55"
      },
      "source": [
        "# What's the average character length?\n",
        "char_lens = [len(sentence) for sentence in train_sentences]\n",
        "mean_char_len = np.mean(char_lens)\n",
        "mean_char_len"
      ],
      "execution_count": 66,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "149.3662574983337"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 66
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 265
        },
        "id": "cjmpXhb94Bn6",
        "outputId": "8791857b-4346-4492-b098-2873494b498a"
      },
      "source": [
        "# Check the distribution of our sequences at a character-level\n",
        "import matplotlib.pyplot as plt\n",
        "plt.hist(char_lens, bins=7);"
      ],
      "execution_count": 67,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "N_xmP3k54U5N",
        "outputId": "07c4b09a-400d-45f0-a44d-86946a76a371"
      },
      "source": [
        "# Find what character length covers 95% of sequences\n",
        "output_seq_char_len = int(np.percentile(char_lens, 95))\n",
        "output_seq_char_len"
      ],
      "execution_count": 68,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "290"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 68
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 35
        },
        "id": "6D5VXP7C4lXK",
        "outputId": "6d07e585-de6d-4676-d5e3-23c3c80b37e3"
      },
      "source": [
        "# Get all keyboard characters\n",
        "import string\n",
        "alphabet = string.ascii_lowercase + string.digits + string.punctuation\n",
        "alphabet"
      ],
      "execution_count": 69,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "application/vnd.google.colaboratory.intrinsic+json": {
              "type": "string"
            },
            "text/plain": [
              "'abcdefghijklmnopqrstuvwxyz0123456789!\"#$%&\\'()*+,-./:;<=>?@[\\\\]^_`{|}~'"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 69
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "vAC0EBsQ4-0i"
      },
      "source": [
        "# Create char-level token vectorizer instance\n",
        "NUM_CHAR_TOKENS = len(alphabet) + 2 # add 2 for space and OOV token (OOV = out of vocab, '[UNK]')\n",
        "char_vectorizer = TextVectorization(max_tokens=NUM_CHAR_TOKENS,\n",
        "                                    output_sequence_length=output_seq_char_len,\n",
        "                                    # standardize=None, # set standardization to \"None\" if you want to leave punctuation in\n",
        "                                    name=\"char_vectorizer\")"
      ],
      "execution_count": 70,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "-Kjj9AWi5A7A"
      },
      "source": [
        "# Adapt character vectorizer to training character\n",
        "char_vectorizer.adapt(train_chars)"
      ],
      "execution_count": 71,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "k_2iBeJ66pGq",
        "outputId": "872a842b-d621-4dc7-ec7b-24da2093afe3"
      },
      "source": [
        "# Check character vocab stats\n",
        "char_vocab = char_vectorizer.get_vocabulary()\n",
        "print(f\"Number of different characters in character vocab: {len(char_vocab)}\")\n",
        "print(f\"5 most common characters: {char_vocab[:5]}\")\n",
        "print(f\"5 least common characters: {char_vocab[-5:]}\")"
      ],
      "execution_count": 72,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Number of different characters in character vocab: 28\n",
            "5 most common characters: ['', '[UNK]', 'e', 't', 'i']\n",
            "5 least common characters: ['k', 'x', 'z', 'q', 'j']\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "gc-3BkYo6cAB",
        "outputId": "2bd0d676-e669-4ff7-e513-756431714170"
      },
      "source": [
        "# Test out character vectorizer\n",
        "random_train_chars = random.choice(train_chars)\n",
        "print(f\"Charified text:\\n {random_train_chars}\")\n",
        "print(f\"\\nLength of random_train_chars: {len(random_train_chars.split())}\")\n",
        "vectorized_chars = char_vectorizer([random_train_chars])\n",
        "print(f\"\\nVectorized chars:\\n {vectorized_chars}\")\n",
        "print(f\"\\nLength of vectorized chars: {len(vectorized_chars[0])}\")"
      ],
      "execution_count": 73,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Charified text:\n",
            " r e l a x a t i o n   t e c h n i q u e s   m i g h t   b e   e f f e c t i v e   i n   r e d u c i n g   s t r e s s   d u r i n g   t h a t   p e r i o d   .\n",
            "\n",
            "Length of random_train_chars: 69\n",
            "\n",
            "Vectorized chars:\n",
            " [[ 8  2 12  5 24  5  3  4  7  6  3  2 11 13  6  4 26 16  2  9 15  4 18 13\n",
            "   3 22  2  2 17 17  2 11  3  4 21  2  4  6  8  2 10 16 11  4  6 18  9  3\n",
            "   8  2  9  9 10 16  8  4  6 18  3 13  5  3 14  2  8  4  7 10  0  0  0  0\n",
            "   0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0\n",
            "   0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0\n",
            "   0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0\n",
            "   0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0\n",
            "   0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0\n",
            "   0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0\n",
            "   0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0\n",
            "   0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0\n",
            "   0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0  0\n",
            "   0  0]]\n",
            "\n",
            "Length of vectorized chars: 290\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ICeYLwWT7YXT"
      },
      "source": [
        "### Creating a character-level embedding"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Dr4aUc_U8ZZl"
      },
      "source": [
        "# Create char embedding layer\n",
        "char_embed = layers.Embedding(input_dim=len(char_vocab), # number of different characters\n",
        "                              output_dim=25, # this is the size of the char embedding in the paper: https://arxiv.org/pdf/1612.05251.pdf (Figure 1)\n",
        "                              mask_zero=True,\n",
        "                              name=\"char_embed\")"
      ],
      "execution_count": 74,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "KPWIekYI8984",
        "outputId": "b41630e0-6883-45a4-ea26-2e4abaab1039"
      },
      "source": [
        "# Test our character embedding layer\n",
        "print(f\"Charified text:\\n {random_train_chars}\\n\")\n",
        "char_embed_example = char_embed(char_vectorizer([random_train_chars]))\n",
        "print(f\"Embedded chars (after vectorization and embedding):\\n {char_embed_example}\\n\")\n",
        "print(f\"Character embedding shape: {char_embed_example.shape}\")"
      ],
      "execution_count": 75,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Charified text:\n",
            " r e l a x a t i o n   t e c h n i q u e s   m i g h t   b e   e f f e c t i v e   i n   r e d u c i n g   s t r e s s   d u r i n g   t h a t   p e r i o d   .\n",
            "\n",
            "Embedded chars (after vectorization and embedding):\n",
            " [[[ 0.03682853 -0.02176062 -0.0291571  ... -0.0383841   0.01376687\n",
            "    0.01630721]\n",
            "  [ 0.03733483 -0.02685341  0.00901743 ...  0.03550402  0.02244205\n",
            "   -0.02421197]\n",
            "  [-0.03578427 -0.0257957  -0.02139012 ...  0.01126925 -0.02738165\n",
            "    0.03825811]\n",
            "  ...\n",
            "  [-0.03297446 -0.00501059 -0.04272097 ... -0.02842923  0.02169894\n",
            "   -0.04187739]\n",
            "  [-0.03297446 -0.00501059 -0.04272097 ... -0.02842923  0.02169894\n",
            "   -0.04187739]\n",
            "  [-0.03297446 -0.00501059 -0.04272097 ... -0.02842923  0.02169894\n",
            "   -0.04187739]]]\n",
            "\n",
            "Character embedding shape: (1, 290, 25)\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "eRqs3HuR9mQ0"
      },
      "source": [
        "### Building a Conv1D model to fit on character embeddings"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "EsNvzza7-dei"
      },
      "source": [
        "# Make Conv1D on chars only\n",
        "inputs = layers.Input(shape=(1,), dtype=\"string\")\n",
        "char_vectors = char_vectorizer(inputs)\n",
        "char_embeddings = char_embed(char_vectors)\n",
        "x = layers.Conv1D(64, kernel_size=5, padding=\"same\", activation=\"relu\")(char_embeddings)\n",
        "x = layers.GlobalMaxPool1D()(x)\n",
        "outputs = layers.Dense(num_classes, activation=\"softmax\")(x)\n",
        "model_3 = tf.keras.Model(inputs=inputs,\n",
        "                         outputs=outputs,\n",
        "                         name=\"model_3_conv1d_char_embeddings\")\n",
        "\n",
        "# Compile\n",
        "model_3.compile(loss=\"categorical_crossentropy\",\n",
        "                optimizer=tf.keras.optimizers.Adam(),\n",
        "                metrics=[\"accuracy\"])"
      ],
      "execution_count": 76,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "nyv7TehW_TUN",
        "outputId": "75bd3ab0-c5dd-4396-cf52-458d582183ee"
      },
      "source": [
        "# Summary\n",
        "model_3.summary()"
      ],
      "execution_count": 77,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Model: \"model_3_conv1d_char_embeddings\"\n",
            "_________________________________________________________________\n",
            "Layer (type)                 Output Shape              Param #   \n",
            "=================================================================\n",
            "input_3 (InputLayer)         [(None, 1)]               0         \n",
            "_________________________________________________________________\n",
            "char_vectorizer (TextVectori (None, 290)               0         \n",
            "_________________________________________________________________\n",
            "char_embed (Embedding)       (None, 290, 25)           700       \n",
            "_________________________________________________________________\n",
            "conv1d_1 (Conv1D)            (None, 290, 64)           8064      \n",
            "_________________________________________________________________\n",
            "global_max_pooling1d (Global (None, 64)                0         \n",
            "_________________________________________________________________\n",
            "dense_3 (Dense)              (None, 5)                 325       \n",
            "=================================================================\n",
            "Total params: 9,089\n",
            "Trainable params: 9,089\n",
            "Non-trainable params: 0\n",
            "_________________________________________________________________\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "NUA0HWMZ_WIo",
        "outputId": "45a8a301-18e5-4500-f235-b4c0e35e29d2"
      },
      "source": [
        "# Create char level datasets\n",
        "train_char_dataset = tf.data.Dataset.from_tensor_slices((train_chars, train_labels_one_hot)).batch(32).prefetch(tf.data.AUTOTUNE)\n",
        "val_char_dataset = tf.data.Dataset.from_tensor_slices((val_chars, val_labels_one_hot)).batch(32).prefetch(tf.data.AUTOTUNE)\n",
        "test_char_dataset = tf.data.Dataset.from_tensor_slices((test_chars, test_labels_one_hot)).batch(32).prefetch(tf.data.AUTOTUNE)\n",
        "\n",
        "train_char_dataset"
      ],
      "execution_count": 78,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<PrefetchDataset shapes: ((None,), (None, 5)), types: (tf.string, tf.float64)>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 78
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "wPCCh4BtAEb9",
        "outputId": "a70b35bc-b7f0-4ec5-c43e-e9b9e3d45db6"
      },
      "source": [
        "# Fit the model on chars only\n",
        "model_3_history = model_3.fit(train_char_dataset,\n",
        "                              steps_per_epoch=int(0.1*len(train_char_dataset)),\n",
        "                              epochs=3,\n",
        "                              validation_data=val_char_dataset,\n",
        "                              validation_steps=int(0.1*len(val_char_dataset)))"
      ],
      "execution_count": 79,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Epoch 1/3\n",
            "562/562 [==============================] - 4s 7ms/step - loss: 1.3998 - accuracy: 0.4312 - val_loss: 1.0372 - val_accuracy: 0.5934\n",
            "Epoch 2/3\n",
            "562/562 [==============================] - 4s 6ms/step - loss: 1.0268 - accuracy: 0.5927 - val_loss: 0.9303 - val_accuracy: 0.6396\n",
            "Epoch 3/3\n",
            "562/562 [==============================] - 3s 6ms/step - loss: 0.9322 - accuracy: 0.6372 - val_loss: 0.8674 - val_accuracy: 0.6609\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "ZusMPvw9AZL1",
        "outputId": "48020844-aac4-4e44-9235-8615bab3998d"
      },
      "source": [
        "# Make predictions with character model only\n",
        "model_3_pred_probs = model_3.predict(val_char_dataset)\n",
        "model_3_pred_probs"
      ],
      "execution_count": 80,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([[0.16433214, 0.38347867, 0.05417649, 0.38544863, 0.01256402],\n",
              "       [0.1726565 , 0.19425228, 0.00274712, 0.62493753, 0.00540649],\n",
              "       [0.1269376 , 0.20097108, 0.05024505, 0.58828765, 0.03355869],\n",
              "       ...,\n",
              "       [0.02293018, 0.06129179, 0.18166408, 0.09462415, 0.63948977],\n",
              "       [0.04491011, 0.24892128, 0.16164595, 0.04387634, 0.5006463 ],\n",
              "       [0.49364576, 0.3557844 , 0.08555725, 0.04342405, 0.02158854]],\n",
              "      dtype=float32)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 80
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "LLv-9ngYAxLl",
        "outputId": "f7e13359-55f6-4917-ad54-d096326a263d"
      },
      "source": [
        "# Convert prediction probabilities to class labels\n",
        "model_3_preds = tf.argmax(model_3_pred_probs, axis=1)\n",
        "model_3_preds"
      ],
      "execution_count": 81,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<tf.Tensor: shape=(30212,), dtype=int64, numpy=array([3, 3, 3, ..., 4, 4, 0])>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 81
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "bHfGUYAQA6a4",
        "outputId": "6f8ec453-a6b8-4717-917d-bb1072a4c4b2"
      },
      "source": [
        "# Calculate results for Conv1D model chars only\n",
        "model_3_results = calculate_results(y_true=val_labels_encoded,\n",
        "                                    y_pred=model_3_preds)\n",
        "model_3_results"
      ],
      "execution_count": 82,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "{'accuracy': 66.02674433999735,\n",
              " 'f1': 0.6509344858149794,\n",
              " 'precision': 0.658014497112375,\n",
              " 'recall': 0.6602674433999736}"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 82
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "b4toBHmUBH0g"
      },
      "source": [
        "## Model 4: Combining pretrained token embeddings + characters embeddings (hybrid embedding layer)\n",
        "\n",
        "1. Create a token-level embedding model (similar `model_1`)\n",
        "2. Create a character-level model (similar to `model_3` with a slight modification)\n",
        "3. Combine 1 & 2 with a concatenate (`layers.Concatenate`) \n",
        "4. Build a series of output layers on top of 3 similar to Figure 1 and section 4.2 of https://arxiv.org/pdf/1612.05251.pdf\n",
        "5. Construct a model which takes token and character-level sequences as input and produces sequence label probabilities as output"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "YuLAk4_yMtr-"
      },
      "source": [
        "# 1. Setup token inputs/model\n",
        "token_inputs = layers.Input(shape=[], dtype=tf.string, name=\"token_input\")\n",
        "token_embeddings = tf_hub_embedding_layer(token_inputs)\n",
        "token_outputs = layers.Dense(128, activation=\"relu\")(token_embeddings)\n",
        "token_model = tf.keras.Model(inputs=token_inputs,\n",
        "                             outputs=token_outputs)\n",
        "\n",
        "# 2. Setup char inputs/model\n",
        "char_inputs = layers.Input(shape=(1,), dtype=tf.string, name=\"char_input\")\n",
        "char_vectors = char_vectorizer(char_inputs)\n",
        "char_embeddings = char_embed(char_vectors)\n",
        "char_bi_lstm = layers.Bidirectional(layers.LSTM(24))(char_embeddings) # bi-LSTM shown in Figure 1 of https://arxiv.org/pdf/1612.05251.pdf\n",
        "char_model = tf.keras.Model(inputs=char_inputs,\n",
        "                            outputs=char_bi_lstm)\n",
        "\n",
        "# 3. Concatenate token and char inputs (create hybrid token embedding)\n",
        "token_char_concat = layers.Concatenate(name=\"token_char_hybrid\")([token_model.output,\n",
        "                                                                  char_model.output])\n",
        "\n",
        "# 4. Create output layers - adding in Dropout, discussed in section 4.2 of https://arxiv.org/pdf/1612.05251.pdf\n",
        "combined_dropout = layers.Dropout(0.5)(token_char_concat)\n",
        "combined_dense = layers.Dense(128, activation=\"relu\")(combined_dropout)\n",
        "final_dropout = layers.Dropout(0.5)(combined_dense)\n",
        "output_layer = layers.Dense(num_classes, activation=\"softmax\")(final_dropout)\n",
        "\n",
        "# 5. Construct model with char and token inputs\n",
        "model_4 = tf.keras.Model(inputs=[token_model.input, char_model.input],\n",
        "                         outputs=output_layer,\n",
        "                         name=\"model_4_token_and_char_embeddings\")"
      ],
      "execution_count": 83,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "R_ibpvlZP6Kg",
        "outputId": "b790f2ba-0cde-4431-bd89-76fa22608816"
      },
      "source": [
        "# Get a summary of our model\n",
        "model_4.summary()"
      ],
      "execution_count": 84,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Model: \"model_4_token_and_char_embeddings\"\n",
            "__________________________________________________________________________________________________\n",
            "Layer (type)                    Output Shape         Param #     Connected to                     \n",
            "==================================================================================================\n",
            "char_input (InputLayer)         [(None, 1)]          0                                            \n",
            "__________________________________________________________________________________________________\n",
            "token_input (InputLayer)        [(None,)]            0                                            \n",
            "__________________________________________________________________________________________________\n",
            "char_vectorizer (TextVectorizat (None, 290)          0           char_input[0][0]                 \n",
            "__________________________________________________________________________________________________\n",
            "universal_sentence_encoder (Ker (None, 512)          256797824   token_input[0][0]                \n",
            "__________________________________________________________________________________________________\n",
            "char_embed (Embedding)          (None, 290, 25)      700         char_vectorizer[1][0]            \n",
            "__________________________________________________________________________________________________\n",
            "dense_4 (Dense)                 (None, 128)          65664       universal_sentence_encoder[1][0] \n",
            "__________________________________________________________________________________________________\n",
            "bidirectional (Bidirectional)   (None, 48)           9600        char_embed[1][0]                 \n",
            "__________________________________________________________________________________________________\n",
            "token_char_hybrid (Concatenate) (None, 176)          0           dense_4[0][0]                    \n",
            "                                                                 bidirectional[0][0]              \n",
            "__________________________________________________________________________________________________\n",
            "dropout (Dropout)               (None, 176)          0           token_char_hybrid[0][0]          \n",
            "__________________________________________________________________________________________________\n",
            "dense_5 (Dense)                 (None, 128)          22656       dropout[0][0]                    \n",
            "__________________________________________________________________________________________________\n",
            "dropout_1 (Dropout)             (None, 128)          0           dense_5[0][0]                    \n",
            "__________________________________________________________________________________________________\n",
            "dense_6 (Dense)                 (None, 5)            645         dropout_1[0][0]                  \n",
            "==================================================================================================\n",
            "Total params: 256,897,089\n",
            "Trainable params: 99,265\n",
            "Non-trainable params: 256,797,824\n",
            "__________________________________________________________________________________________________\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 976
        },
        "id": "qcTbe-uZQypi",
        "outputId": "cdb3aeef-574e-46de-81e2-c114ce2b1042"
      },
      "source": [
        "# Plot hybrid token and character model\n",
        "from keras.utils import plot_model\n",
        "plot_model(model_4, show_shapes=True)"
      ],
      "execution_count": 85,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "image/png": "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OSE+Pl6d2GgUHh6OtLQ03Lp1S6c6ef4nIiIi+g2vRCCiHkmXBw52B9XV1fj8889RUFCgfnCgm5sbNm3ahE2bNuHevXsyR6ib+vp6ZGRkoKKiAoGBgXqrNzY2FmPHjkVoaCgAQAiB69ev48SJE7h48aLe2iEiIiLqrZhEICLqBu7cuQNfX1+4u7tr/GofHR2NBQsWIDAwUOeHLMopKysLBw8exLFjx6BSqfRS57Zt23DmzBkcPXoUpqamAIDMzEw4OjrCx8cHR44c0Us7RERERL0ZkwhE1KPExMQgNTUVZWVlGDp0KA4cOCB3SB22Y8cOjSkS09LSNNZv3rwZoaGheO2112SKUHfTpk3DRx99BHt7e73Ul5mZifv37yMrKwu2trbq5XPnztXYd7reykBEREREmkzkDoCISJ+2bNmCLVu2yB2GwU2fPh3Tp0+XOwzZzJkzB3PmzJE7DCIiIqIej1ciEBEREREREZFWmEQgIiIiIiIiIq0wiUBEREREREREWmESgYiIiIiIiIi0wgcr6uDbb7+VOwSiLqXxf2Lfvn0yR9L98HxCRERERN2RJIQQcgfRHUiSJHcIREQkk/T0dCxcuFDuMIiIiIhkxysRtMRcC/VmkiTxSxQREREREfGZCERERERERESkHSYRiIiIiIiIiEgrTCIQERERERERkVaYRCAiIiIiIiIirTCJQERERERERERaYRKBiIiIiIiIiLTCJAIRERERERERaYVJBCIiIiIiIiLSCpMIRERERERERKQVJhGIiIiIiIiISCtMIhARERERERGRVphEICIiIiIiIiKtMIlARERERERERFphEoGIiIiIiIiItMIkAhERERERERFphUkEIiIiIiIiItIKkwhEREREREREpBUmEYiIiIiIiIhIK0wiEBEREREREZFWmEQgIiIiIiIiIq0wiUBEREREREREWmESgYiIiIiIiIi0wiQCEREREREREWmFSQQiIiIiIiIi0gqTCERERERERESkFSYRiIiIiIiIiEgrTCIQERERERERkVaYRCAiIiIiIiIirTCJQERERERERERaYRKBiIiIiIiIiLTCJAIRERERERERaYVJBCIiIiIiIiLSCpMIRERERERERKQVSQgh5A6CiLqO4OBg5OfnayzLzc3F0KFDYWtrq15mbGyM//mf/4GTk5OhQyQiIiIiIpmYyB0A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au3YsQM3b97Evn374Ofnp3Q4REQOryGOw6tWrTKaInH9+vVG6xvK+FzTmDh48GCj93/lyhUlQm6UXJQOgIioMUhJSUFKSorSYdSZfv36oV+/fkqH0WAMGjQIgwYNUjoMIqIGo6GPwzVpCOMzx8T6h1ciEBEREREREZFJWEQgIiIiIiIiIpOwiEBEREREREREJmERgYiIiIiIiIhMosiDFZcuXYqtW7cq0TURNQLZ2dkAgKFDhyociePh+ZmInwMia3EcthzPP/b13XffoXv37kqH4XBUIiL27JAnEyLHs3v3btx///31djo8IqrepEmT0KNHD6XDcCjMU6gxunTpEo4cOYL+/fsrHQqR3fXo0QOTJk1SOgyHYvciAhE5HpVKhc2bN2PYsGFKh0JEREQ2tmXLFgwfPhz8WkBEpuAzEYiIiIiIiIjIJCwiEBEREREREZFJWEQgIiIiIiIiIpOwiEBEREREREREJmERgYiIiIiIiIhMwiICEREREREREZmERQQiIiIiIiIiMgmLCERERERERERkEhYRiIiIiIiIiMgkLCIQERERERERkUlYRCAiIiIiIiIik7CIQEREREREREQmYRGBiIiIiIiIiEzCIgIRERERERERmYRFBCIiIiIiIiIyCYsIRERERERERGQSFhGIiIiIiIiIyCQsIhARERERERGRSVhEICIiIiIiIiKTsIhARERERERERCZhEYGIiIiIiIiITMIiAhERERERERGZhEUEIiIiIiIiIjIJiwhEREREREREZBIWEYiIiIiIiIjIJCwiEBEREREREZFJWEQgIiIiIiIiIpOwiEBEREREREREJmERgYiIiIiIiIhMwiICEREREREREZmERQQiIiIiIiIiMgmLCERERERERERkEhelAyCi+iUvLw8iUmV5UVERrl+/brTM09MTarXaXqERERGRlXQ6HQoLC42WFRUVAUCVcV6lUsHX19dusRGRY1BJdd8WiKjRevTRR/HPf/7zru2cnZ1x/vx5BAYG2iEqIiIisoXLly8jJCQEFRUVd23bt29f7N271w5REZEj4e0MRGRkxIgRUKlUtbZxcnLCww8/zAICERGRgwkMDMTDDz8MJ6favwaoVCqMGDHCTlERkSNhEYGIjDz99NNwcan9TieVSoVRo0bZKSIiIiKypeeee+6ubZydnTFkyBA7RENEjoZFBCIy4ufnh379+sHZ2bnGNk5OToiLi7NjVERERGQr8fHxtf5g4OzsjCeeeAJNmjSxY1RE5ChYRCCiKkaOHAm9Xl/tOhcXF8TGxsLHx8fOUREREZEteHt7o3///jUWEkQEI0eOtHNUROQoWEQgoioGDhwINze3atdVVFQwsSAiInJwI0eOrPHhiq6urnjyySftHBEROQoWEYioCq1Wi7i4uGqnb3R3d8eAAQMUiIqIiIhs5cknn4RWq62yXK1WIy4uDh4eHgpERUSOgEUEIqrWM888A51OZ7RMrVbj6aefhru7u0JRERERkS1oNBoMGTKkyg8GOp0Ozz77rEJREZEjYBGBiKr1+OOPV3nugU6nwzPPPKNQRERERGRL1f1g4O3tjccee0yhiIjIEbCIQETVUqvVSEhIgKurq2GZr68vYmJiFIyKiIiIbOW//uu/4O/vb/i/Wq3GiBEjjMZ+IqI7sYhARDUaMWIEysrKANxKLEaOHFnrlFBERETkOFxcXDBixAjDLQ284pCITKESEVE6CCKqn/R6PZo3b47Lly8DAA4cOICePXsqHBURERHZyr///W/06tULABAYGIgLFy7AyYm/MxJRzXiGIKIaOTk54bnnngMABAcHIzo6WuGIiIiIyJaio6MREhICABg1ahQLCER0Vw57XXJ2dja+/fZbpcMgavCaNm0KAHjooYewdetWhaMhavhatmyJHj161Nn2t2zZUmfbJiLH9OCDD+L8+fNo0qQJzxFEZKS6vMRhb2fYsmULhg8frnQYRERENvX000/XacFOpVLV2baJiIioYakuL3HYKxEqOWgNhKjeGjp0KAAYnSy2bduGp59+WqmQ6r3KoibPR2Stys9fXdu8eTOGDRtml76IyDFwrK9KpVLxfGmm6vJIclw15SW86YmI7opJBRERUcPGsZ6ITMUiAhERERERERGZhEUEIiIiIiIiIjIJiwhEREREREREZBIWEYiIiIiIiIjIJCwiEBEREREREZFJWEQgojqxa9cu+Pj44LPPPlM6lAZtz549mDZtGrZv347w8HCoVCqoVCo899xzVdr269cPXl5ecHZ2RocOHXD48GEFIjbd3Llz0b59e3h7e8PNzQ2RkZF4/fXXUVhYaNROp9Nh1qxZCA8Ph6urK0JCQpCcnIySkpIq2zxw4AB69uwJrVaL4OBgTJ06FTdv3jSs//TTT/HOO++goqKizt8fERE1DsyJlNcQ8yQlsYhARHVCRJQOocGbPXs2li9fjunTpyM+Ph6nTp1CREQEmjRpgvXr12Pnzp1G7b/66its3boVTz31FI4dO4YuXbooFLlp9u7di/Hjx+P06dO4cuUKUlJSsGzZsipzFk+cOBGLFi1CSkoKrl69ig0bNmDNmjUYO3asUbtjx46hX79+iImJQW5uLtLS0vDhhx9i3LhxhjYDBw6ERqNBTEwM8vLy7PI+iYioYWNOpLyGmCcpiUUEIqoTsbGxuHHjBp566imlQ0FJSQmio6OVDsOmFi5ciE2bNmHLli3w8vIyWrd8+XI4OTkhMTERN27cUChC63l6eiIxMRH+/v7w8vLCsGHDEBcXhy+++ALnzp0DAJw6dQqrVq3CqFGjkJCQAC8vLzzyyCNISkrC3//+d/z222+G7c2bNw9BQUF466234OHhgR49emDq1Kn46KOP8PvvvxvaTZgwAZ07d8aAAQNQXl5u9/dNREQNC3Oi+qWh5ElKYhGBiBq8tWvXIicnR+kwbObkyZOYOXMm3nrrLWg0mirro6OjMXHiRJw/fx7JyckKRGgbn3/+OZydnY2WNW3aFABQXFwMADh06BD0ej0eeugho3ZPPPEEAODLL78EAJSXl2Pnzp3o06cPVCqVoV3//v0hItixY4fR6+fMmYOjR49i2bJltn1TRERECmpoOZElGkqepCQWEYjI5g4cOIDQ0FCoVCq8//77AIDU1FR4eHhAq9Vix44d6N+/P7y9vdGiRQts3LjR8Nrly5dDo9GgWbNmeOmllxAcHAyNRoPo6Gh8//33hnZJSUlwdXVFUFCQYdkrr7wCDw8PqFQqXLlyBcCtS90nT56MrKwsqFQqREZGAgC++OILeHt7Y8GCBfbYJTa1fPlyiAgGDhxYY5v58+fjnnvuwQcffIA9e/bUuj0RwZIlS9CuXTu4ubnBz88PgwcPNvp13tTjBwAVFRWYNWsWQkND4e7ujnvvvRebN2+27k3/v/Pnz8Pd3R1hYWEAACenW8OYu7u7Ubs2bdoAgOFKhFOnTqGwsBChoaFG7SIiIgAAGRkZRsv9/PzQp08fLFu2jJehEhGRxZgT1U8NNU+yFxYRiMjmevXqhW+//dZo2csvv4zXXnsNJSUl8PLywubNm5GVlYXw8HC88MIL0Ol0AG4NhKNHj0ZxcTEmTJiA06dP4/DhwygvL8djjz1muIx9+fLlGDZsmFEfK1euxFtvvWW0bNmyZXjqqacQEREBEcHJkycBwPDgPL1eXyf7oC7t3LkTbdu2hVarrbGNu7s7PvroIzg5OeGFF15AUVFRjW3nzJmDadOm4c0330ROTg6++eYbnDt3Dr1798bly5cBmH78AOCNN97Au+++i6VLl+LixYt46qmn8Mwzz+DHH3+06n0XFxdj7969eOGFF+Dq6goAiIqKAgCj2xYAoEmTJgCA3NxcAMClS5cAoMqtHxqNBu7u7ob3ebv7778f58+fx88//2xV3ERE1HgxJ6qfGmKeZE8sIhCR3UVHR8Pb2xsBAQFISEhAUVERzp49a9TGxcXFUPFt3749UlNTUVBQgHXr1tkkhtjYWOTn52PmzJk22Z69FBUV4c8//zT8gl6bHj164LXXXsPp06fxxhtvVNumpKQES5YswZAhQzBy5Ej4+PigU6dOWLVqFa5cuYLVq1dXeU1tx6+0tBSpqamIi4tDfHw8fH19MWPGDKjVaquPXUpKCoKDgzF//nzDsk6dOuGJJ57AypUrsXfvXpSWluLSpUtIS0uDSqUyDNqVMzDceXsEAKjV6mpncqi8miEzM9OquImIiGrCnEg5DS1PsicWEYhIUZW/KN9eoa3OAw88AK1Wa3TpWGOUk5MDEan1KoTbzZ8/H23btsXKlStx4MCBKuuPHTuGwsJCPPDAA0bLH3zwQbi6uhpdLlmdO4/f8ePHUVxcjI4dOxrauLu7IygoyKpjl5aWhi1btuDLL7+scjXBpk2bMHToUIwaNQr+/v7o2bMnPvnkE4iI4YqEymdHVPegxLKysiq3QwAw7OPqrlIgIiKyNeZE9tdQ8iR7YxGBiByGm5ub4fL0xqq0tBTArX1hCo1Gg3Xr1kGlUuH555+v8ot75TSGnp6eVV7r6+uLgoICs+KrvBxwxowZhrmYVSoVzpw5Y3gYork2bdqEhQsXYt++fWjdunWV9T4+Pli1ahWys7NRXFyMrKwsvPfeewCA5s2bA4DhPtH8/Hyj1xYXF6O0tBTBwcFVtltZWKjc50RERPUFcyLbaAh5khJYRCAih6DT6ZCXl4cWLVooHYqiKr/YVt6/aIoePXpg0qRJOHHiBObNm2e0ztfXFwCqHQQt2d8BAQEAgKVLl0JEjP4dPHjQrG0BwIoVK7B+/Xrs3bvXUBAwxaFDhwAAffv2BQCEhYXBy8sLZ86cMWpXeT/ovffeW2UbZWVlAKo+tJGIiEhJzIlsy5HzJKWwiEBEDmHfvn0QEXTv3t2wzMXF5a6X/DU0zZo1g0qlMnte43nz5iEqKgpHjhwxWt6xY0d4enpWeZjP999/j7KyMnTt2tWsflq2bAmNRoOjR4+a9bo7iQimTp2KzMxMpKenV/sLQG3WrFmDsLAw9OnTB8Ctv5UBAwbgm2++MXpw1O7du6FSqaqd6aJyHwcGBlrxToiIiGyLOZHtOVqepDQWEYioXtLr9bh+/TrKy8uRkZGBiRMnIjQ0FKNHjza0iYyMxLVr15Ceng6dTofc3NwqvzQDgL+/Py5cuIDTp0+joKAAOp0Ou3fvdsjpjLRaLcLDw5GdnW3W6yov17vzwYIajQaTJ09GWloa1q9fj/z8fGRmZmLcuHEIDg5GYmKi2f2MGTMGGzduRGpqKvLz81FRUYHs7GxcvHgRAJCQkIDAwEAcPny4xu38+uuvePfdd7FmzRqo1WqjS/5UKhUWL15saNutWzecOXMG5eXlOH36NJKTk7Fnzx6sXbvWcC8iAMycOROXL1/G7NmzUVRUhIMHD2LRokUYPXo02rZtWyWGyn3cqVMns/YBERGRLTEnqnv1KU9yCOKgNm/eLA4cPlG99fTTT8vTTz9t1TZWrFghQUFBAkC0Wq0MHDhQVq5cKVqtVgBImzZtJCsrS1avXi3e3t4CQFq1aiV//PGHiIgkJiaKWq2WkJAQcXFxEW9vbxk8eLBkZWUZ9XP16lXp27evaDQaCQsLk1dffVWmTJkiACQyMlLOnj0rIiKHDx+WVq1aibu7u/Tq1UsuXboku3btEi8vL5k/f75V71XE/uejpKQkUavVUlxcbFiWlpYmERERAkCaNm0q48ePr/a1U6ZMkUGDBhkt0+v1smjRImnTpo2o1Wrx8/OTuLg4OX78uKGNOcfv5s2bMnXqVAkNDRUXFxcJCAiQ+Ph4OXbsmIiIxMXFCQCZNWtWje8xMzNTANT4b9GiRYa2jz32mPj6+oqLi4v4+flJbGysHDp0qNrt7t+/X7p16yZubm4SHBwsU6ZMkdLS0mrbxsbGSkhIiOj1+hrjtDVbfP7uBoBs3ry5TvsgImoIbHG+bGw5kT3GMUs4Up5Un9R0PFUiIvYqWNjSli1bMHz4cDho+ET11tChQwEAW7duVSyGl156CVu3bsXVq1cVi8Ec9j4fnTx5Eu3atcO6deswcuRIu/RpS3q9Ho888ghGjx6N559/XulwqnX16lW0aNEC8+fPx+TJk+3Wrz0+fyqVCps3b64ypzgRERmrD+dLR8uJ6kMeSbZT0/Hk7QxEVC+Z8+DAxiYyMhJz587F3LlzUVhYqHQ4ZqmoqEB6ejoKCgqQkJCgdDg1mjNnDu677z4kJSUpHQoRETVyzImovmER4f+NGTMGGo0GKpWqwU7n9eCDD8LZ2Rn33Xefzbc9duxYeHl5QaVSmf2gkO3btyM8PLzKPc+3/6tuWjdL1Id9UFO7Xbt2wcfHB5999pnNY6OGZ9q0aRg6dCgSEhLMfsiikvbt24ft27dj9+7d0Gq1SodTrSVLluDo0aPYtWsX1Gq10uE0OI50rlu8eLHhYaarVq1SOhxSiDU5jqXuzI1atmyJtWvXGtbv378fISEhUKlUCAoKwurVq+0SlymxBgUFOeRVckRkOhYR/t+6deuQnJysdBh16tChQ4bpzmztgw8+wJo1ayx6bXx8PE6dOoWIiAj4+PgYpjkpLy9HcXExLl++bLMvG/VhH9TUjrfm3DJ9+nSsW7cON27cQFhYGLZt26Z0SPXWggULkJSUhLffflvpUEwWExODDRs2ICgoSOlQqrVjxw7cvHkT+/btg5+fn9LhNEiOdK5LTk7Gt99+q3QYpDBrchxL3ZkbnTt3Dv/93/9tWP/www9jwIABePHFF3Hx4kW8+OKLdo2vtlgvXbqE9evXKxZPQ8KciOorF6UDIPtTqVRKh2ASZ2dnuLu7w93dHffcc49Nt10f90FsbKxD/aJcV1JSUpCSkqJ0GA6jX79+6Nevn9JhNBiDBg3CoEGDlA6jQeO5zrZKSkoQExPDYkcjotfrMXbsWGg0GqxcubJe5jRkG8yJqL7ilQjVaOgn47q6PLcu91t6erpNt6f0PrDH35iIYOvWrYpe4khERHVr7dq1yMnJUTqMBq++5IZ6vR7PP/88tFotUlNT601cRNS4NLoiwscff4wHHngAGo0GHh4eaN26NebNm2dY7+TkhJ07d6J///7w8fFBcHAwPvzwQ6Nt/Otf/0L79u3h4+MDjUaDTp064csvvwQAvPvuu9BqtfDy8kJOTg4mT56MkJAQHD9+3OQYKyoqMGvWLISGhsLd3R333nsvNm/eDABYtmwZPDw84OTkhK5duyIwMBBqtRoeHh7o0qULevfujZYtW0Kj0cDX1xevv/56le2fPHkSUVFR8PDwgLu7O3r37o0DBw6YHANw6wvqokWL0LZtW7i5ucHHxwdTpkyp0tcXX3xh83lnHW0fmNLuwIEDCA0NhUqlwvvvvw8ASE1NhYeHB7RaLXbs2IH+/fvD29sbLVq0wMaNG6vEmpKSgrZt28Ld3R1NmzZFWFgYUlJS+AR2IrJYUlISXF1djW4/eeWVV+Dh4QGVSoUrV64AMP18Vd25rl27dlCpVIZzenFxMQDg9ddfN4yzH330EYDaz8u1jb/79+9Ht27doNVq4e3tjU6dOiE/Px9A7WO6tWrrt7b3Yur+nDhxIiZPnoysrCyoVCpERkbabNuVasub7jZOmspe8YoIlixZgnbt2sHNzQ1+fn4YPHgwfv/9d6NtmDq+W/qBAZuCAAAgAElEQVT3aGlupNfrMXr0aPj4+Bg+P+buz9riuttnoba/Z3PV1tfYsWMNz1eIiIjAkSNHANx6fplWq4WPjw8+/fRTq94rEVnJLhNM1gFL5mVfunSpAJC3335brl69KteuXZP/+Z//kWeffVZERN58800BIF9//bXk5eXJtWvXZMCAAeLm5iZFRUWG7WzdulXmzJkj165dk6tXr0r37t2lSZMmhvWV25kwYYKsWLFChgwZIr/99pvJcSYnJ4ubm5ts27ZNrl+/LtOnTxcnJyfDvOezZ88WAPL9999LUVGRXLlyRZ544gkBIDt37pTc3FwpKiqSpKQkASBHjx41bDsmJkbCw8Plzz//FJ1OJ7/88os89NBDotFoDHOXmhLDm2++KSqVSt577z25fv26FBcXy8qVKwWAHDlyxLCdzz//XLy8vGTu3Ll3fd8RERHi4+NjtGzChAmSmZlZpa0j7QNT2507d04AyIoVK4xeW/k3eePGDcnJyZHevXuLh4eHlJWVGdotWLBAnJ2dZceOHVJcXCw//fSTBAYGyiOPPHLX/X6n+jq/b31myfmIqDr2+PzBzHnPn332WQkMDDRatmjRIgEgubm5hmWmnq/uPNeVl5dL69atJTQ0VMrLy436ee2112Tp0qWG/5tyXr5z/P3xxx/F29tb3nnnHSkpKZFLly7JkCFDDLHfbUw/ceKEAJC//vWvJu8zEZHCwsJa+zX1vdxtf8bHx0tERIRR37ba9t3yprv1Yyp7xTtr1ixxdXWVjz/+WPLy8iQjI0O6dOkiTZs2lUuXLhm2Y+q4bcnf42+//WZRblReXi7PPvusqNVqo7nprdmfd8ZV22fhbn/Pt8dqirt97uLj48XZ2VnOnz9v9LpnnnlGPv30U6vfq6nMPV8S88iGpqbj6bBZr7lJe1lZmfj6+krfvn2NlpeXl8uyZctE5D8nmpKSEsP6v/3tbwJAfvnllxq3nZKSIgAkJyenxu2YqqSkRLRarSQkJBiWFRcXi5ubm7z88ssi8p8v0AUFBYY2//u//ysAjL5w//DDDwJANm3aZFgWExMjnTt3NuozIyNDAEhycrJJMRQXF4tWq5XHHnvMaDsbN26sMsCaIyIiQgBU+VdbEaG+7wNz9lVtRYTb/5YqE5mTJ08alj344IPSrVs3oz5efPFFcXJykps3b1bZf7Xhyd98LCKQrTSEIsLdzlfVnesqv/xt2bLFsKyoqEhCQ0Plxo0bImLa+FhdDL/88osAkM8//9yk93vnmG5pEaG2fi19L9XtzzuLCLba9t3yJlP6MYW94i0uLhZPT0+jfkT+kydUfqE3ddy2NG5zRUREiJeXl4wYMUK6dOkiAKRDhw5SWFhYbXtbxnX7Z8GUz5E5RYTa+hIR2bNnjwCQ+fPnG9rcuHFD2rRpYyg22uMYsIhgPuaRDUtNx7PRPFgxIyMDeXl5ePzxx42WOzs7Y8KECTW+rvLeeZ1Od9c2tpjD9fjx4yguLkbHjh0Ny9zd3REUFFTlcrvbubq6AgDKy8urxFVb7ADQqVMn+Pj4ICMjw6QYTp48ieLiYsTExJj/Bu/Cx8cHeXl5hv9PnDjR5NfWx31QF/uq8n3e/p5KS0uh0WiM2lVUVECtVsPZ2dnsPr777jsMHTrUukAbkezsbADgPiOrfffdd+jevbvSYdhMdeer6owdOxZz5szBsmXLDJ+j9evXY/DgwfD29gZg+fgYHh6OZs2aYeTIkZgwYQJGjx5d67TBthrTa+vX2rG+tv1pq23fLW/6+eefLepHqXh//PFHFBYW4oEHHjBa/+CDD8LV1RXff/89ANPHbUvjtkRxcTH69OmDv//97xgyZAg++eQTjB07ttrbOWwZ1+2fBXM/R+a683P36KOP4p577sGHH36I6dOnQ6VSYdOmTUhISDDkNfY6BkuXLsXWrVtttr2G7rvvvgPAnKihqCkvaTTPRKi8Z8vX19fqbe3cuROPPPIIAgIC4ObmVu0995YqKioCAMyYMcNwP5hKpcKZM2cM94nWBbVabRiI7xZD5RemgICAOoun0rJly4wGh7pUF/vAXvtqwIAB+Omnn7Bjxw6UlJTgxx9/RHp6Op588kmLighERPbk6emJF198Ed9++y1++OEHAMBf//pXJCUlGdpYOj66u7tj79696NWrFxYsWIDw8HAkJCSgpKQEQN2N6bX1W5djva22fbe8yVb92Cveyh8oPD09q6zz9fVFQUEBANPHbXvma56enkhMTARwa0ry8PBwbNq0CUuXLrVpXLV9Fu72OTLX3T53KpUKL730Ek6dOoWvv/4aAPC3v/3NaJpLpXJmImpEUzw2b94cAAwPgbLU2bNnERcXhyFDhuDDDz9E8+bNsWLFCpslHZWD1tKlS836Fd4a5eXluHbtGkJDQ02K4Z///CcA4ObNm3aJzx7qah9UXh1Q1/tqzpw5+OmnnzB69GgUFhYiODgYw4YNs/iBlt27d2fV3QxbtmzB8OHDuc/Iao35l5ukpCQsW7YMS5cuxbhx49CyZUtEREQY1lszPnbo0AGfffYZcnNzsWTJEixcuBAdOnTAX/7ylzod02vqNyEhweL3cje2yiPuljfZqh97xVtZXKgsFtwuLy8PLVq0AGD6uK1EvgbcumJz69atiI6Oxuuvv46uXbvi4YcftjouU/Lbmv6eZ86cedftf/PNN/jpp5/w2muvmZxLjx49GtOnT8cHH3yAli1bwtvbG61atbL6vZrrtdde40OqzVA5jjEnahhqyksazZUIrVu3hr+/P7766iurtpOZmQmdToeXX34Z4eHh0Gg0Np1ep3JWgaNHj9psm3fzz3/+E3q9Hl26dDEpho4dO8LJyQn79++3W4wXL17EmDFj6mz7dbUP7LWvjh07hqysLOTm5kKn0+Hs2bNITU2Fn59fnfZLRA2fi4vLXW9HsIUWLVpg2LBh2LZtG2bOnFnlS4Gl4+OFCxfw66+/Arj1pePtt99Gly5d8Ouvv9bpmF5bv3U51ttq23fLm2zVj73i7dixIzw9PfHjjz8aLf/+++9RVlaGrl27GtqZMm4rka9V6tKlC5YuXYry8nIMGzYMFy5csDquu30Wavt7NsVPP/0EDw8Pk/qq5Ofnh+HDhyM9PR2LFy/GCy+8YLReyWNA1Ng1miKCm5sbpk+fjm+++QZJSUk4f/489Ho9CgoKTD4BAjD8Ur1nzx6UlpbixIkThvvobEGj0WDMmDHYuHEjUlNTkZ+fj4qKCmRnZ+PixYs26aOsrAw3btxAeXk5Dh8+jKSkJLRq1QqjR482KYaAgADEx8dj27ZtWLt2LfLz85GRkYHVq1dX6Wv37t1WTfEoIigpKcH27dsN98Xagr32gTn7yhrjx49HaGgoCgsLbbpdIqLIyEhcu3YN6enp0Ol0yM3NxZkzZ+qkr8mTJ6O8vBzXr1/Ho48+arTO0vHxwoULeOmll/D777+jrKwMR44cwZkzZ9C9e/c6HdNr69eWY72/vz8uXLiA06dPo6CgAM7OzjbZ9t3yJlu9B1ttx5R4J0+ejLS0NKxfvx75+fnIzMzEuHHjEBwcbLhdwNRx25q4rc2NAGDcuHEYMWIELl++jKFDhxoKfZbGdbfPQm1/z7XR6XS4fPky9u3bZygimPO5GzduHG7evInPP/8cTz31lNE6e+TMRFQD+z/j0TYsfRr6+++/L506dRKNRiMajUbuv/9+Wblypbzzzjvi7u4uAKRNmzaSlZUl69evFz8/PwEgLVq0MMzQMHXqVPH39xdfX18ZOnSovP/++wJAIiIiZPz48YbttGzZUj7++GOzY7x586ZMnTpVQkNDxcXFRQICAiQ+Pl6OHTsmy5YtE61WKwCkdevW8q9//UsWLlwoPj4+AkACAwNlw4YNsmnTJgkMDBQA4ufnJxs3bhQRkXXr1knfvn2lWbNm4uLiIk2aNJERI0bImTNnTI5BRKSgoEDGjh0rTZo0EU9PT+nVq5fMmjXLsK9+/vlnERHZtWuXeHl5GT1d905paWk1zsxw+78ZM2aIiDjcPjCl3YoVKyQoKEgAiFarlYEDB8rKlSsN77Pyb3L16tXi7e0tAKRVq1aGKSn37t0rTZo0MdpfarVa2rVrJ9u3bzfr749P1TUfZ2cgW6mPszNcvXpV+vbtKxqNRsLCwuTVV1+VKVOmCACJjIyUs2fPmny+qu5cd6e+ffvKBx98UG0stZ2Xbx/Hbx9/T58+LdHR0eLn5yfOzs7SvHlzefPNNw1PeK9tTJ84caJhHPHw8JAhQ4aYvN/u1m9t78Wc8//hw4elVatW4u7uLr169ZJLly7ZbNsiNedNd3sP5rBXvHq9XhYtWiRt2rQRtVotfn5+EhcXV2XKRFPHd0v+HkUsy41atGgh06dPrxJn27ZtBYA0a9ZM1q5da1VctX0W/vWvf9X492xqHpeWlmZSX2fPnjV6n/fff79MmzbN7L+d2t6rqcw9XxLzyIampuOpEhGxSTXCzirvQXbQ8IlsKjU1FSdOnDB6yFJZWRneeOMNpKam4vr163B3dzdpW7yXzXw8H5Gt2OPzp1KpsHnzZt7jS0QOITY2Fu+//z7CwsLs3jfPl+ZjHtmw1HQ8G82DFYkaqkuXLiEpKanKPYGurq4IDQ2FTqeDTqczuYhAREREpBSdTmeY8jEjIwMajUaRAgIR1azRPBNBSb///rvR1DM1/at8WjOROdzd3aFWq7F27VpcvnwZOp0OFy5cwAcffIBZs2YhISHBps+TINvbs2cPpk2bhu3btyM8PNxwTnjuueeqtO3Xrx+8vLzg7OyMDh064PDhwwpEbLq5c+eiffv28Pb2hpubGyIjI/H6669XeX6HTqfDrFmzEB4eDldXV4SEhCA5Obna6cMOHDiAnj17QqvVIjg4GFOnTrV4BhRT45s/f3615+3bp6D99NNP8c477xjmOaeGh+O5abifyBpTp07FiRMn8Mcff2DMmDGYN2+e0iGRHTXknMiUXOJ2er0eS5cuRXR0dLXrTclh6io34ZUIdhAVFcXLnKnO+Pj44KuvvsLcuXNxzz33oKioCJ6enujQoQMWLlyIF198UekQqRazZ8/GkSNHsGHDBnh5eSE+Ph6RkZHIy8vD+vXrkZCQgNjYWEP7r776Cl988QVWrVqF9PR0BSM3zd69ezF+/HgkJCRArVZj9+7dGDlyJDIzM7F7925Du4kTJ+LDDz/EunXrEBsbi59++gmDBg3CxYsXsWHDBkO7Y8eOoV+/fkhOTsZXX32FjIwMDBw4ELm5ufjwww/rLD5TDBw4EH/++SdiYmKQnp5e43z15Lg4npuG+4msodVqERUVhZCQEKxcuRLt27dXOiSyk4aeE5njxIkTGDNmDP7973+jc+fO1bYxJYepq9yEVyIQNQC9e/fGP/7xD8OME3l5efj3v/+Nl19+GS4ujlcrLCkpqbHq6kh93M3ChQuxadMmbNmyBV5eXkbrli9fDicnJyQmJuLGjRsKRWg9T09PJCYmwt/fH15eXhg2bBji4uLwxRdf4Ny5cwCAU6dOYdWqVRg1ahQSEhLg5eWFRx55BElJSfj73/+O3377zbC9efPmISgoCG+99RY8PDzQo0cPTJ06FR999BF+//33Oomv0scffwwRMfr3yy+/GLWZMGECOnfujAEDBqC8vNyCPUZE1LjNnz8fFRUVOHv2bJUZGRqbxpIPAY0jJwJMyyV+/vlnvPHGGxg3bhzuu+++Grdlag5TF7kJiwhEVO+sXbsWOTk5Dt9HbU6ePImZM2firbfegkajqbI+OjoaEydOxPnz55GcnKxAhLbx+eefw9nZ2WhZ06ZNAQDFxcUAgEOHDkGv1+Ohhx4yavfEE08AAL788ksAQHl5OXbu3Ik+ffoYzSnev39/iAh27NhRJ/GZa86cOTh69CiWLVtm0euJiIiAxpEPAY0nJzJV586dsX37djz77LNwc3OrsZ05OYytcxMWEYjIaiKCJUuWoF27dnBzc4Ofnx8GDx5s9MtwUlISXF1dERQUZFj2yiuvwMPDAyqVCleuXAFw67L2yZMnIysrCyqVCpGRkVi+fDk0Gg2aNWuGl156CcHBwdBoNIiOjjaaW9qaPgDgiy++sHrublMtX74cIoKBAwfW2Gb+/Pm455578MEHH2DPnj21bs+UY5CamgoPDw9otVrs2LED/fv3h7e3N1q0aIGNGzcaba+iogKzZs1CaGgo3N3dce+992Lz5s3Wven/d/78ebi7uxselOXkdGsouvPhn23atAEAw5UIp06dQmFhoWGO8UoREREAbj2Aqy7iM5efnx/69OmDZcuW8ZJuIqJGhPmQZRpzTmRrNeUwNs9N6nBayTrFedmJ6oYl8/vOmjVLXF1d5eOPP5a8vDzJyMiQLl26SNOmTeXSpUuGds8++6wEBgYavXbRokUCQHJzcw3L4uPjJSIiwqhdYmKieHh4yK+//iqlpaVy7NgxefDBB8XLy8toTmlr+vj888/Fy8tL5s6da9b7t+R8FB4eLu3bt692XUREhPz5558iIvLtt9+Kk5OTtG7dWgoLC0VEZPfu3TJo0CCj15h6DN58800BIF9//bXcuHFDcnJypHfv3uLh4SFlZWWGdsnJyeLm5ibbtm2T69evy/Tp08XJyUkOHTpk1vu8U1FRkXh5eUlSUpJhWUZGhgCQmTNnGrUtLy8XABIXFyciIvv37xcAsmjRoirbdXd3l5iYGKtiqyk+EZF58+ZJixYtxNfXV9RqtbRu3VoGDRokP/zwQ7XbmTZtmgCQI0eOmNW/PebXBuc9JyIyibnny8aeD4lYNo41lpzI3FxCROShhx6Szp07m7T9mnKYSpbkJjUdT16JQERWKSkpwZIlSzBkyBCMHDkSPj4+6NSpE1atWoUrV65g9erVNuvLxcXFUFVu3749UlNTUVBQgHXr1tlk+7GxscjPz8fMmTNtsr2aFBUV4c8//zT8gl6bHj164LXXXsPp06fxxhtvVNvGkmMQHR0Nb29vBAQEICEhAUVFRTh79iwAoLS0FKmpqYiLi0N8fDx8fX0xY8YMqNVqq/d1SkoKgoODMX/+fMOyTp064YknnsDKlSuxd+9elJaW4tKlS0hLS4NKpYJOpwMAwwwMd166BwBqtbramRxsER8A/OUvf8Gnn36Kc+fOobCwEBs3bsTZs2fRp08fHDt2rMp2Kq+iyMzMtDomIiKq/5gPWaYx5UTm5hLmqimHqWTL3IRFBCKyyrFjx1BYWIgHHnjAaPmDDz4IV1dXo8vrbO2BBx6AVqu16IF6SsrJyYGIQKvVmtR+/vz5aNu2LVauXIkDBw5UWW/tMXB1dQUAw5f148ePo7i42GjKIXd3dwQFBVm1r9PS0rBlyxZ8+eWXVR6atGnTJgwdOhSjRo2Cv78/evbsiU8++QQigiZNmgCA4T7J6h4KVFZWVuV2CFvG17JlS9x///3w9PSEq6srunfvjnXr1qGkpAQrV66ssq3KY3v58mWrYiIiIsfAfMgyjSknMjeXMEdtOUwlW+YmLCIQkVXy8vIA3HpC7J18fX1RUFBQp/27ubkhNze3TvuwtdLSUgCo9WE5t9NoNFi3bh1UKhWef/75Kr+42/oYFBUVAQBmzJhhNI/xmTNnLH7Y4KZNm7Bw4ULs27cPrVu3rrLex8cHq1atQnZ2NoqLi5GVlYX33nsPANC8eXMAMNzbmZ+fb/Ta4uJilJaWIjg42KLYTImvOp06dYKzszP++OOPKusqCxqVx5qIiBo25kOWaYw50e1qyyVMZWoOY8vchEUEIrJK5Xyz1Z2U8/Ly0KJFizrrW6fT1XkfdaHyJF5RUWHya3r06IFJkybhxIkTmDdvntE6Wx+DgIAAAMDSpUurTEN08OBBs7YFACtWrMD69euxd+9eQ0HAFIcOHQIA9O3bFwAQFhYGLy8vnDlzxqjdyZMnAQD33nuv2bFZE59er4der6828SkrKwNQ9WGRRETUMDEfskxjy4nuVFsuYQpzchhb5iYsIhCRVTp27AhPT0/8+OOPRsu///57lJWVoWvXroZlLi4uhsvDbGHfvn0QEXTv3r3O+qgLzZo1g0qlMnuu43nz5iEqKgpHjhwxWm7OMTBFy5YtodFocPToUbNedycRwdSpU5GZmYn09PRqfxWozZo1axAWFoY+ffoAuHVsBwwYgG+++QZ6vd7Qbvfu3VCpVLU+1dna+B5//PEqyw4dOgQRQY8ePaqsqzy2gYGBZsVERESOifmQZRpLTgSYn0vUxpIcy5a5CYsIRGQVjUaDyZMnIy0tDevXr0d+fj4yMzMxbtw4BAcHIzEx0dA2MjIS165dQ3p6OnQ6HXJzc6v8qgwA/v7+uHDhAk6fPo2CggLDIKjX63H9+nWUl5cjIyMDEydORGhoKEaPHm2TPnbv3m2XKY20Wi3Cw8ORnZ1t1usqL+G788GC5hwDU/sZM2YMNm7ciNTUVOTn56OiogLZ2dm4ePEiACAhIQGBgYE4fPhwjdv59ddf8e6772LNmjVQq9VGlwGqVCosXrzY0LZbt244c+YMysvLcfr0aSQnJ2PPnj1Yu3at4f5EAJg5cyYuX76M2bNno6ioCAcPHsSiRYswevRotG3b1tDO1vGdP38emzZtQl5eHnQ6HQ4ePIixY8ciNDQU48aNq7LtymPbqVMnE/Y4ERE5OuZDlmksORFgfi5RG3NymEo2zU1Mnt+hnuEUj0R1w5KpefR6vSxatEjatGkjarVa/Pz8JC4uTo4fP27U7urVq9K3b1/RaDQSFhYmr776qkyZMkUASGRkpGFqosOHD0urVq3E3d1devXqJZcuXZLExERRq9USEhIiLi4u4u3tLYMHD5asrCyb9bFr1y7x8vKS+fPnm/X+LTkfJSUliVqtluLiYsOytLQ0iYiIEADStGlTGT9+fLWvnTJlSpXpjEw5BitXrhStVisApE2bNpKVlSWrV68Wb29vASCtWrWSP/74Q0REbt68KVOnTpXQ0FBxcXGRgIAAiY+Pl2PHjomISFxcnACQWbNm1fgeMzMzBUCN/26fqvGxxx4TX19fcXFxET8/P4mNja1x6qT9+/dLt27dxM3NTYKDg2XKlClSWlpq1MbW8U2ePFkiIiLEw8NDXFxcpEWLFvLCCy/IhQsXqt12bGyshISEiF6vr7H/6nCKRyKi+sPc82Vjz4dELBvHGkNOJGJ6LnHw4EHp2bOnBAcHG3KSoKAgiY6Olv3794uIeTlMJUtyk5qOp8N+C2cRgahu2ONLjCUSExPF399f6TCqZcn56MSJE+Li4iIff/xxHUVVtyoqKqR3796ydu1apUOplpLxXblyRTQajSxevNjs17KIQERUf9TH82V9zodELBvHmBPVPUtzk5qOJ29nICKHYc5Dd+q7yMhIzJ07F3PnzkVhYaHS4ZiloqIC6enpKCgoQEJCgtLhVKF0fHPmzMF9992HpKQku/dNREQNX0PKhwDmRPZg69yERQQiIoVMmzYNQ4cORUJCgtkPFFLSvn37sH37duzevdvkeZ3tScn4lixZgqNHj2LXrl1Qq9V27ZuIiMhRMSeqO3WRm7CIQET13vTp07Fu3TrcuHEDYWFh2LZtm9Ih2cyCBQuQlJSEt99+W+lQTBYTE4MNGzYgKChI6VCqpVR8O3bswM2bN7Fv3z74+fnZtW8iImr4GnI+BDAnqgt1lZu42GxLRER1JCUlBSkpKUqHUWf69euHfv36KR0GWWnQoEEYNGiQ0mEQEVED1dDzIYA5ka3VVW7CKxGIiIiIiIiIyCQsIhARERERERGRSVhEICIiIiIiIiKTsIhARERERERERCZhEYGIiIiIiIiITKISEVE6CEts2bIFw4cPVzoMIiIim3r66aexdevWOtu+SqWqs20TERFRw1JdXuKwUzxGR0dj8+bNSodB1CgVFBRg7NixePPNN3HvvfcqHQ5Rg9KyZcs63T7HTiICABHBs88+i/HjxyM6OlrpcIionqouL3HYKxGISFkBAQGYMWMGJkyYoHQoREREZKYrV64gICAAX3/9NR599FGlwyEiB8JnIhCRRdq1a4fjx48rHQYRERFZICcnBwDQrFkzhSMhIkfDIgIRWSQqKgq///670mEQERGRBXJzcwHcurKQiMgcLCIQkUXatm3LIgIREZGDysnJgZOTE5o0aaJ0KETkYFhEICKLREVF4eLFi8jLy1M6FCIiIjJTbm4u/P394eLisM9ZJyKFsIhARBaJiooCAD4XgYiIyAHl5OTweQhEZBEWEYjIImFhYdBoNLylgYiIyAHl5ubyeQhEZBEWEYjIIk5OTmjTpg2vRCAiInJAvBKBiCzFIgIRWSwqKgq//fab0mEQERGRmXglAhFZikUEIrIYp3kkIiJyTDk5OSwiEJFFWEQgIotFRUUhKysLOp1O6VCIiIjIDLm5ubydgYgswiICEVksKioKOp0OWVlZSodCREREJqqoqMC1a9dYRCAii7CIQEQWa9u2LVQqFW9pICIiciBXrlyBXq/n7QxEZBEWEYjIYh4eHmjZsiWLCERERA4kJycHAHglAhFZhEUEIrJKVFQUp3kkIiJyILm5uQDAKxGIyCIsIhCRVThDAxERkWPJycmBs7Mz/P39lQ6FiBwQiwhEZJW2bduyiEBERORAcnJy0LRpUzg58asAEZmPZw4iskpUVBTy8vJw6dIlpUMhIiIiE3B6RyKyBosIRGSVqKgoAODVCERERA4iNzeXz0MgIouxiEBEVmnevDl8fX3x22+/KR0KERERmSAnJ4dXIhCRxVhEICKrtW3bljM0EBEROQjezkBE1mARgYisxhkaiIiIHEdOTg5vZyAii7GIQERW4wwNREREjoNFBCKyBosIRGS1qKgonD17FoWFhUqHQkRERLXQ6XS4ceMGb2cgIouxiEBEVouKioKI4MSJE0qHQkRERLXIzc2FiAZr2uoAACAASURBVPBKBCKyGIsIRGS1yMhIqNVq3tJARERUz+Xk5AAAr0QgIouxiEBEVlOr1QgPD+cMDURERPUciwhEZC0WEYjIJqKiovDbb78pHQYRERHVIjc3F2q1Gj4+PkqHQkQOikUEIrIJTvNIRERU/1XOzKBSqZQOhYgcFIsIRGQTUVFR+OOPP1BRUaF0KERERFSD3Nxc3spARFZhEYGIbCIqKgqlpaU4c+aM0qEQERFRDVhEICJrsYhARDYRFRUFALylgYiIqB6rvJ2BiMhSLCIQkU34+voiKCio2iKCTqdTICIiIiK6U05ODq9EICKruCgdABE1DBUVFWjVqhX+8Y9/QETw+++/IzMzE3/88QcWLlyIF198UekQiYiIGpU333wTGRkZCAwMRFBQEJo2bYo///wT7dq1Q0ZGBpo2bYqAgACo1WqlQyUiB6ISEVE6CCJyPD///DO2bdtmKBacOnXKcMWBm5sbRARlZWUAgIMHD6J79+5KhktERNToLF68GFOmTIGLiwucnZ0hItDpdLgz/ffx8cG3336L9u3bKxQpETkSFhGIyCJZWVmIiopCRUVFlWTkdiqVCgUFBfDw8LBjdERERHT48GF07dq11jZOTk7o2rUrfvjhBztFRUSOjs9EICKLREREIDExES4utd8V1apVKxYQiIiIFHDffffB29u71jYigjfeeMNOERFRQ8AiAhFZbPbs2bUWESp/3SAiIiL7c3JyQt++feHs7Fxjm5CQEAwaNMiOURGRo2MRgYgsFhAQYLjXsjouLi64//777RwVERERVYqJiYFKpap2nbOzM15//fVaiwxERHfiMxGIyCqFhYVo1aoVrl27Vu36zz77DE8++aSdoyIiIiIA+PXXX9GhQ4dq13l6euLixYvw9PS0c1RE5Mh4JQIRWcXT0xOzZs2q8VeMzp072zkiIiIiqtSuXTs0adKkynK1Wo1XXnmFBQQiMhuvRCAiq5WVlaFNmzbIzs6GXq83LPf09ER+fn6Nl1ESERFR3XvmmWewdetWlJeXG5Y5Ozvjzz//RMuWLRWMjIgcEa9EICKrubq6YsGCBVWmeuzcuTMLCERERAp79NFHjcZotVqN4cOHs4BARBZhEYGIbOKZZ55Bhw4dDLc1uLq64oEHHlA4KiIiInr00UdRUVFh+L9Op0NycrKCERGRI2MRgYhswsnJCe+8844hSamoqODzEIiIiOqB8PBwNG/eHMCtmZMefvhhzp5ERBZjEYGIbGbAgAHo2bMnnJ2dUVFRgU6dOikdEhEREQF4/PHH4ezsjPLyckyZMkXpcIjIgbGIQEQ2tWTJEuj1ejg7O6Njx45Kh0NERET4zy0NYWFhGDBggNLhEJEDc7lzwcGDB7FkyRIlYiGiBiI4OBj5+fl47rnnlA6FiBqBSZMmoUePHor1v2TJEhw8eFCx/olMUVJSAgDw8/PD8OHDFY6G6D969OiBSZMmKR0GmaHKlQjnzp3Dtm3blIiFiBqITp06VTsndUO1bds2ZGdnKx2GQ/nuu+/w3XffKR0GNQDbtm3DuXPnFI3h4MGD/Hsmi9hz/HB3d0fTpk3RqlUru/RXVzh+NCzfffcdi7AOqMqVCJW2bt1qzziIqIE5deoUwsPDlQ7DLlQqFV577TUMGzZM6VAcxtChQwFwrCHr1ZdpZLt3786/ZzKbvcePkydPIjIy0i591RWOHw1L5fEkx8JnIhBRnWgsBQQiIiJH4egFBCKqH1hEICIiIiIiIiKTsIhARERERERERCZhEYGIiIiIiIiITMIiAhERERERERGZhEUEIqJ6YteuXfDx8cFnn32mdCj13p49ezBt2jRs374d4eHhUKlUUKlUeO6556q07devH7y8vODs7IwOHTrg8OHDCkRsurlz56J9+/bw9vaGm5sbIiMj8frrr6OwsNConU6nw6xZsxAeHg5XV1eEhIQgOTnZMBf87Q4cOICePXtCq9UiODgYU6dOxc2bN+s0vvnz5xuOy+3/OnbsaGjz6aef4p133kFFRYVFsRDRLRw/TNeQxw9Tzru30+v1WLp0KaKjo6tdb8r5nufxxolFBCKiekJElA7BIcyePRvLly/H9OnTER8fj1OnTiEiIgJNmjTB+vXrsXPnTqP2X331FbZu3YqnnnoKx44dQ5cuXRSK3DR79+7F+PHjcfr0aVy5cgUpKSlYtmxZlWmwJk6ciEWLFiElJQVXr17Fhg0bsGbNGowdO9ao3bFjx9CvXz/ExMQgNzcXaWlp+PDDDzFu3Lg6jc8UAwcOhEajQUxMDPLy8iyKh4g4fpiqoY8f5jhx4gQefvhhTJo0CcXFxdW2MeV8z/N448QiAhFRPREbG4sbN27gqaeeUjoUlJSU1PjLhJIWLlyITZs2YcuWLfDy8jJat3z5cjg5OSExMRE3btxQKELreXp6IjExEf7+/vDy8sKwYcMQFxeHL774AufOnQMAnDp1CqtWrcKoUf/H3n3HRXXsfwP/LHXpxYoiSlFsqImYCGpM4o2xXKwRSfT6U28USwIoGkTUYI0loSnEWMK9xhsESyRqNLlqiBLL1SiKGImiqNgAC70zzx95duO6gLu0pXzerxd/eM6cM989Z5w5OztnZgo8PDxgYmKCN998E15eXvj222/x+++/y8+3cuVKtG3bFsuXL4eRkRFcXFzg5+eHf/3rX7h27VqdxCfzzTffQAih8HflyhWFNN7e3ujduzdGjBiB0tLSalwxImL78XLNof0AVKt3L126hEWLFmH27Nno06dPpedStb5nPd78sBOBiIiUbN++Henp6ZoOQ8GNGzewdOlSLF++HFKpVGm/q6srfHx8cO/ePSxYsEADEdaOgwcPQltbW2Fby5YtAUD+a9G5c+dQXl6O119/XSHdsGHDAAA//vgjAKC0tBSHDh3C4MGDIZFI5OmGDx8OIQRiY2PrJD51BQYGIiEhASEhIdU6nogaDrYfDV/v3r2xd+9eTJo0Cfr6+pWmU6e+Zz3evLATgYioAYiPj4eNjQ0kEgk2bdoEAIiIiICRkREMDQ0RGxuL4cOHw9TUFNbW1oiKipIfGxYWBqlUitatW2PWrFmwsrKCVCqFq6srzp49K0/n5eUFPT09tG3bVr5t7ty5MDIygkQiQWZmJoA/h8n7+voiJSUFEokEDg4OAIAjR47A1NQUq1evro9LoiQsLAxCCIwaNarSNKtWrUKXLl2wbds2HD16tMrzCSEQFBSEbt26QV9fHxYWFhgzZozCr/Oq3gMAKCsrw7Jly2BjYwMDAwP06tUL0dHRNfvQ/9+9e/dgYGAAW1tbAICW1p/Nt4GBgUK6zp07A4B8JMLNmzeRm5sLGxsbhXT29vYAgMuXL9dJfOqysLDA4MGDERISwmHZRGpi+/Fyzbn9qG2V1fesx5sXdiIQETUAAwcOxKlTpxS2zZkzB/PmzUNBQQFMTEwQHR2NlJQU2NnZYcaMGSgpKQHw58Pd1KlTkZ+fD29vb6SmpuLChQsoLS3FO++8Ix9yGBYWBnd3d4U8wsPDsXz5coVtISEhcHNzg729PYQQuHHjBgDIJ00qLy+vk2vwMocOHYKjoyMMDQ0rTWNgYIB//etf0NLSwowZM5CXl1dp2sDAQPj7+yMgIADp6ek4ceIE7t69i0GDBuHRo0cAVL8HALBo0SKsX78ewcHBePDgAdzc3PDBBx/g/PnzNfrc+fn5OH78OGbMmAE9PT0AQNeuXQFA4bUFAGjRogUAICMjAwDw8OFDAFAauiuVSmFgYCD/nLUdn4y/vz8sLCygp6cHW1tbjBkzBufOnavwPK+88gru3buHS5cu1TgmouaE7cfLNaf2Q516V11V1fcA6/HmhJ0IRESNgKurK0xNTdGqVSt4eHggLy8Pd+7cUUijo6Mj/1Wke/fuiIiIQE5ODiIjI2slhpEjRyI7OxtLly6tlfOpIy8vD7du3ZL/gl4VFxcXzJs3D6mpqVi0aFGFaQoKChAUFIRx48Zh8uTJMDMzg5OTEzZv3ozMzExs2bJF6Ziq7kFhYSEiIiIwduxYjB8/Hubm5liyZAl0dXVrfP3XrFkDKysrrFq1Sr7NyckJw4YNQ3h4OI4fP47CwkI8fPgQ+/btg0QikT+cylZgeHE4KgDo6upWuJJDbcQHAP/3f/+H77//Hnfv3kVubi6ioqJw584dDB48GElJSUrnkY2iSExMrHFMRPQXth/Np/1Qt95VV2X1vQzr8eaDnQhERI2MrPf/+V8xKuLs7AxDQ8NqTZ7X0KSnp0MIUeWvSM9btWoVHB0dER4ejvj4eKX9SUlJyM3NhbOzs8L2fv36QU9PT2EYb0VevAfJycnIz89XWEbLwMAAbdu2rdH137dvH2JiYvDjjz8qjSbYtWsXJkyYgClTpsDS0hIDBgzAd999ByGEfESC7N3fiia6Ki4uVnodojbj69ChA1555RUYGxtDT08P/fv3R2RkJAoKChAeHq50Ltm9rY3REURUMbYfL9eY2w916111VFXfy7Aebz7YiUBE1ITp6+vLh7Y3ZoWFhQBQ5QRQz5NKpYiMjIREIsH06dOVfnGXLUNlbGysdKy5uTlycnLUik827HXJkiUKa3Pfvn272pMN7tq1C2vXrkVcXBw6deqktN/MzAybN29GWloa8vPzkZKSgi+++AIA0K5dOwCQv7+cnZ2tcGx+fj4KCwthZWVVrdhUia8iTk5O0NbWxh9//KG0T9ahIbvXRKRZbD8ab/vxvKrqXVWpWt+zHm8+2IlARNRElZSU4NmzZ7C2ttZ0KDUmezCRvVerChcXF8yfPx/Xr1/HypUrFfaZm5sDQIUPe9W5Zq1atQIABAcHKy2tdfr0abXOBQAbN27Ezp07cfz4cXmHgCpk772+9dZbAABbW1uYmJjg9u3bCulk7yn36tVL7dhqEl95eTnKy8srfJgvLi4GoDxZJBHVP7Yfjbf9eFFV9a4q1KnvWY83H+xEICJqouLi4iCEQP/+/eXbdHR0XjqMtSFq3bo1JBKJ2ut3r1y5El27dsXFixcVtvfs2RPGxsZKk1adPXsWxcXF6Nu3r1r5dOjQAVKpFAkJCWod9yIhBPz8/JCYmIj9+/dX+EtXVbZu3QpbW1sMHjwYwJ/3e8SIEThx4oTChGaHDx+GRCKpcqbymsb37rvvKm07d+4chBBwcXFR2ie7t23atFErJiKqfWw/Gl/7Aahf71alOu0R6/Hmg50IRERNRHl5OZ4+fYrS0lJcvnwZPj4+sLGxwdSpU+VpHBwc8OTJE+zfvx8lJSXIyMhQ+pUaACwtLXH//n2kpqYiJycHJSUlOHz4sMaW6DI0NISdnR3S0tLUOk42LPXFiQWlUil8fX2xb98+7Ny5E9nZ2UhMTMTs2bNhZWUFT09PtfOZNm0aoqKiEBERgezsbJSVlSEtLQ0PHjwAAHh4eKBNmza4cOFCpee5evUq1q9fj61bt0JXV1dhaKtEIsHnn38uT/vaa6/h9u3bKC0tRWpqKhYsWICjR49i+/btCrNmL126FI8ePcKnn36KvLw8nD59Ghs2bMDUqVPh6OgoT1fb8d27dw+7du3Cs2fPUFJSgtOnT+PDDz+EjY0NZs+erXRu2b11cnJS4YoTUW1i+6GssbUfgPr1blXUqe9lWI83H+xEICJqADZt2oR+/foBAPz8/DB69GhEREQgODgYwJ/Dzm/evImtW7fC19cXADBs2DBcv35dfo7CwkI4OTnBwMAAgwYNQpcuXfDzzz8rDGGcM2cO3nrrLbz//vtwdHTEypUr5cMOXVxc5Mt5zZ49G61bt0b37t0xYsQIPHnypF6uQ1VGjhyJpKQkhfdTv/vuOzg4OCAlJQX9+vXDxx9/rHRc//79MX/+fKXtn376KdasWYMVK1agZcuWGDx4MDp16oS4uDgYGRkBgFr3ICQkBPPmzcO6devQokULWFlZwcfHB0+fPgXw5zDP9PR0xMbGVvoZ1Vlb29zcHH369IGBgQFeffVVXLt2DSdPnpS/yiDTo0cP/Pjjj/jpp5/QokULjB8/HtOnT8eXX36pkK624xs2bBiWLFkCa2trGBoawt3dHQMGDMCZM2fkEz8+79y5c2jfvn21X7Egaq7Yfrxcc2g/ZOdUpd49c+YMBg4ciHbt2uHs2bO4dOkSrKysMGDAAJw4cQKAevW9DOvxZkS8IDo6WlSwmYiIKgFAREdHazQGT09PYWlpqdEY1PHee++J9957T61jrl+/LnR0dMQ333xTR1HVrbKyMjFo0CCxfft2TYdSIU3Gl5mZKaRSqfj888/VPrYh/P+rTnkmEqJhlF+2Hw1fQ28/hKh+Pc76s3HiSAQioiZCnUmjGiMHBwesWLECK1asQG5urqbDUUtZWRn279+PnJwceHh4aDocJZqOLzAwEH369IGXl1e9501EbD8aMk3Xz6piPd68sBOBiIgaDX9/f0yYMAEeHh5qT5KlSXFxcdi7dy8OHz6s8lrl9UmT8QUFBSEhIQE//PADdHV16zVvImo+2H7UHdbjzU+NOxH69esHbW1t9OnT56Vpf/jhB5iZmeHAgQOVpvnwww9hYmICiUSiMEupKsfWJU3n//nnn8tnl928eXOFaY4ePQp/f3+V0tal77//HuvWrat2r/bevXthZ2enNIGLjo4OWrZsib/97W/Yt2+f0nEsX9WnTvl68f60bdsWkydPfmkely5dgoeHB2xtbaGvr4+WLVuid+/eWLVqlTyNh4eH0n2v7O/gwYNKsSxdurTKGIKCgiCRSKClpYWuXbvixIkTNS6vDcHixYsRGRmJrKws2NraYs+ePZoOqU6tXr0aXl5e+OyzzzQdisqGDBmC//znP2jbtq2mQ6mQpuKLjY1FUVER4uLiYGFhUa95NzSVtU+NWWFhIbp27YolS5aofWxlzwJ6enpo3bo13nzzTWzYsEH+zjhVD9uPhq+htx+sx5unGncinDt3TmkSp8oIFSbo2LZtG7Zu3VqtY+uSpvNfsGABTp06Ven+Tz/9FGFhYVi8ePFL09a1UaNGQSqVYsiQIXj27Jnax48fPx43b96Evb09zMzM5GvlZmRkIDo6Gvfu3cP48eMRHR2tcBzLV/WpU75evD8PHz7Ezp07qzx/YmIiXF1d0bZtW/z888/IysrCqVOnMGzYMMTFxSmk/emnn+SzCstmJR41ahSKi4uRl5eH9PR0zJgxA4BiWQH+vL+VLT9VVlaGsLAwAMDbb7+Na9eu4Y033qhxeW0I1qxZg6KiIgghcOvWLbz33nuaDqnODR06FGvXrtV0GFRDo0ePhr+/v9Ls581RZe1TYxYQEIDk5ORqHVvRs0B5eTnS09MRExMDW1tb+Pn5oUePHkpL7ZHq2H5QTbEeb55q7XUGiUTy0jQjR45EVlYW3Nzc1D5/TY5VV0FBAVxdXTWWv7rWrl2LXbt2ISYmBiYmJtU6R0WfuSa8vb3Ru3dvjBgxAqWlpbVyTgsLCwwZMgShoaEAgJiYGIX9LF91ozbK1+effw5zc3OEhISgU6dOkEql6NKli8LMzsCf9ciAAQNgZmYGHR0dhe26urowNDREq1atKlyDuW/fvnj48CH2799fYQx79+5F+/btK9xXF+WViKg5O3XqFK5cuVKr55RIJDA3N8ebb76JyMhIxMTE4NGjR/I2lIiI6ketdSLU5vsvqnRI1KXt27cjPT1dozGo6saNG1i6dCmWL18OqVRa7fPUxWcODAxEQkICQkJCavW8nTp1AoBq/2rM8qW62ipfjx8/RlZWltIyT3p6egqvcERFRan0vp+npyf+/ve/K2ybM2cOACgtWycTFBQkX1apInVVXomIVKXp9qm2FBQUYOHChXVen7733nuYOnUq0tPTNfL6JhFRc1VrnQg3btxA165dYWRkJF9jNj4+Xr4/Pj4eNjY2kEgk2LRpk3y7EAIbNmyAo6Mj9PX1YWZmhoULFyqcu6Jj169fD0NDQ5iYmCA9PR2+vr5o3749kpOTUVZWhmXLlsHGxgYGBgbo1auX0tD3b775Bs7OzpBKpTAyMkKnTp2wcuVK+Pj4wNfXFykpKZBIJHBwcKgy9qCgIHTr1g36+vqwsLDAmDFjcO3aNXmaiIgIGBkZwdDQELGxsRg+fDhMTU1hbW2NqKgohZhOnjyJ7t27w8zMDFKpFE5OTvjxxx+rvO5hYWEQQmDUqFEvvUe//PILXnvtNRgaGsLU1BROTk7Izs6u8DOHhITAyMgIWlpa6Nu3L9q0aQNdXV0YGRnh1VdfxaBBg9ChQwdIpVKYm5vjk08+UcrPwsICgwcPRkhIiHy4/pEjR2BqaorVq1e/NN7KXL58GQAwePBg+TaWL82Xr6r069cPeXl5ePvtt/Hrr7/W6FyVefvtt9GtWzf8/PPPSsNnf/31V+Tn52Po0KGVHl9ReSUiqiuqtE8Aqmxz1GkDKnsGeFke1REQEIC5c+eiVatWFe6vjWcBmalTpwIADh8+LN/WGK8ZEVGj8uKaj9HR0aKCzVUaMmSIsLOzE7du3RIlJSXiypUr4vXXXxdSqVT88ccf8nR3794VAMTGjRvl2wICAoREIhFffPGFePr0qcjPzxfh4eECgLh48eJLjwUgvL29xcaNG8W4cePE77//LhYsWCD09fXFnj17xNOnT8XixYuFlpaWOHfunBBCiODgYAFAfPbZZ+Lx48fiyZMn4quvvhKTJk0SQggxfvx4YW9vr/AZK8p/2bJlQk9PT3zzzTfi2bNn4vLly+LVV18VLVu2FA8fPlSK89ixYyIrK0ukp6eLQYMGCSMjI1FcXCxPt3v3bhEYGCiePHkiHj9+LPr37y9atGgh33/9+nUBQHz55ZfybXZ2dqJ79+5K9+TFtLm5ucLU1FSsW7dOFBQUiIcPH4px48aJjIyMSj/zp59+KgCIs2fPiry8PJGZmSmGDRsmAIhDhw6JjIwMkZeXJ7y8vAQAkZCQoBSHv7+/wr08ePCgMDExEStWrFBK+yJ7e3thZmYm/3d+fr44fPiw6Nixoxg6dKjIzc1VSM/yVX/lq6L7U5X8/Hzh7OwsAAgAonv37mLdunXi8ePHVR734MEDAUCMHj26ynT29vbi1q1bIjQ0VAAQPj4+CvvHjh0rIiMjRU5OjgAghgwZUuF5XiyvqkIDWOe7seG60FRbGsL/v+qUZ1Xbp5e1Oaq0AS97BnhZHuqIj48Xo0aNEkIIkZGRIQCIgIAAhTQ1eRZ4UXZ2tgAgOnToIN/WmK5ZQyi/jQ3bj6aF97NxqrVOhN69eytsu3z5sgAgFixYIN/24hel/Px8YWhoKN555x2FY6OiotT6kldQUCDfVlBQIAwNDYWHh4d8W35+vtDX1xdz5swRxcXFwtzcXLz11lsKeZaWloqQkBAhhGpf8vLz84WxsbFCPkII8b///U8AUGgYK4pT9qBw48YNpesps2bNGgFApKenCyEq7hiQSCTCzc1N6dgX0165ckUAEAcPHqwwr6o6EXJycuTb/v3vfwsAIjExUekz79q1S+m8X3/9tQAgduzYUennrIy9vb38S+fzf05OTuLf//63KCoqUkjP8lV/5UsI9ToRhBCiuLhYhIaGiq5du8rvZevWrUVcXFylx6jbifDs2TNhZGQkLCwsRH5+vhBCiJSUFGFtbS2Kiope2olQ3fLKh0D18aGBaktD+P+nbnlWtX16WZsjhGptQFXPAKrkoc7ncnZ2FmlpaUKIyjsR1KFKWyORSIS5ubkQovFds4ZQfhsbth9NC+9n41RrrzO8yMnJCWZmZvKh5xW5ceMG8vPzMWTIkFrLNzk5Gfn5+ejZs6d8m4GBAdq2bYtr167h8uXLePbsGd59912F47S1teHt7a1yPklJScjNzYWzs7PC9n79+kFPTw9nz56t8ng9PT0AqHQmeeCveSYqW3ouPT0dQgiV3iG3s7ND69atMXnyZAQGBiI1NfWlx1REFvfzk8/J4qzos8hie/ToUbXye351hpKSEqSlpWHevHnw8vJCr169kJmZWemxLF/1V75UoaurCy8vL/z+++84c+YMxowZg/T0dEyYMKHWlugyMzPDBx98gKdPn2LXrl0AgODgYMyZM0d+TapSk/I6ceJElZen5J8Ee/bswZ49ezQeB/8a/19jpGr79LI2pzIvtgFVPQNUN4+KLF68GDNnzqx0Etu6kJeXByEETE1NATS+awaw/VD3j+1H0/pr6suKNlU6L09Sfbq6ulV+iUlLSwOASt+Zq468vDwAwJIlS5TWJbayspK/y2Zubl6jfGST+hkbGyvtMzc3R05OjtrnPHToEDZs2ICkpCRkZ2dXee2AP9dfBgB9ff2XntvAwADHjx/HokWLsHr1aqxYsQLu7u6IjIxUmB2/tsnOLYu1JnR0dNC+fXtMmzYNZWVlmDFjBj777DN88cUXFaZn+VJUl+VLXa+//jq+++47zJkzB19++SV+/vlnjBs3rlbOPWfOHGzduhWbN2/G2LFjsXv3bvz+++8qHVuT8urj4wMXFxe1j2uugoODAQDz5s3TcCTU2E2cOFHTIahN1fbpZW2Oqqp6BqitPOLj45GYmIigoCCVj6kNf/zxBwCga9euABrXNZNh+6Eeth9Ni+x+UuNSZ50IpaWlePLkCWxsbCpNI5vtvaioqNbylTXIwcHB8PHxUdovm3Ctql+wVSH7kljRl7lnz57B2tparfPduXMHY8eOxbhx4/D111+jXbt22LhxY4UTFsrIvvBU9kvyi3r06IEDBw4gIyMDQUFBWLt2LXr06IGlS5eqFas6iouLFWKtLU5OTgCAq1evVpqG5esv9VG+nnfixAn89ttv8gZ+/PjxiI6OVli2EQD+8Y9/4Msvv0R+fr7aeVSmT58+6N+/P86cOQNPT09MmDABFhYWKh1bk/Lq4uICd3d3tY9rrnbv3g0AvGZUY42xE0HV9ullbY46KnsG8PDwqJU8vNnVYgAAIABJREFUtm/fjmPHjkFLS3mQ6+rVq7F69WqcO3dOaYRdTR05cgQAMHz4cACN65rJsP1QD9uPpkV2P6lxqbPXGX7++WeUl5fj1VdfrTRNz549oaWlhV9++aXW8pWtGJCQkFDh/k6dOsHS0hI//fRTjfLp2bMnjI2Ncf78eYXtZ8+eRXFxcYXr2FclMTERJSUlmDNnDuzs7CCVSiGRVD1Ms3Xr1pBIJCqtjXz//n35F+5WrVrhs88+w6uvvlrll/DaIIutTZs2tXre3377DQDg6OhYaRqWr7/Udfl60W+//QYjIyP5v4uKiiosa7JOl169eqmdR1Vkyz3u2bNHrV8q6qq8EhE9T9X26WVtjqqqegaorTwiIyPlrx/K/jIyMgD8uVqDEKLWOxAePnyI4OBgWFtbY/r06QAa1zUjImqsaq0Tobi4GFlZWSgtLcWFCxfg5eWFjh07ypfeqUirVq0wfvx47NmzB9u3b0d2djYuX76MLVu2VDsOqVSKadOmISoqChEREcjOzkZZWRnS0tLw4MED6OvrY/HixThx4gS8vLxw7949lJeXIycnR95YWFpa4v79+0hNTUVOTk6Fw76lUil8fX2xb98+7Ny5E9nZ2UhMTMTs2bNhZWUFT09PteKWjdg4evQoCgsLcf369Ze+925oaAg7Ozv5sMiq3L9/H7NmzcK1a9dQXFyMixcv4vbt2+jfv7/Kn7k6ZLHJRg4cPnxY7WWdCgoKUF5eDiEE7t+/j8jISCxZsgQtW7as8gsiy9df6rp8yZSUlODRo0eIi4tT6EQAgLFjxyImJgbPnj1DVlYWYmNjsWjRIowePbrWOxHc3d3RsmVLjB07FnZ2diof92J5JSKqC6q2Ty9rc1RV1TNAbeWhDnWfBYQQyM3NlT8LZGRkIDo6GgMGDIC2tjb2798vnxOhqV4zIqIG5cWZFquzOkNkZKR46623ROvWrYWOjo5o0aKFeP/998Xt27flaTZu3Cjatm0rAAhDQ0P58j85OTniww8/FC1atBDGxsZi4MCBYtmyZQKAsLa2FpcuXarw2HXr1gkDAwP5sj7ffPONPK+ioiLh5+cnbGxshI6OjmjVqpUYP368SEpKkqfZtGmTcHJyElKpVEilUvHKK6+I8PBwIYQQFy5cEB07dhQGBgZi4MCBYsmSJRXGXl5eLjZs2CA6d+4sdHV1hYWFhRg7dqxITk6W5xMeHi4MDQ0FANG5c2eRkpIitmzZIkxNTQUA0bFjR/kymH5+fsLS0lKYm5uLCRMmiE2bNgkAwt7eXvj4+Ig2bdoIAMLIyEiMGzdOCCGEl5eX0NXVlc9EL4QQX3zxhVLa1NRU4erqKiwsLIS2trZo166dCAgIEKWlpRV+Zn9/f3ncnTp1EidPnhRr164VZmZmAoBo06aN+M9//iN27dolz8vCwkJERUUplI2RI0eK9u3bi/LyciGEED/88IMwMTERq1atqrQ87du3r9KVGfT19UXnzp3FnDlzxJ07d1i+NFC+qro/z//t27dPfsxPP/0kJk6cKOzt7YW+vr7Q09MTjo6OIjAwUBQWFiqVgezsbPHGG28IS0tLAUBoaWkJBwcHsXr16krLSsuWLcVHH30k3/fJJ5+IU6dOyf/9/HXW0tIS3bt3FydPnlQ434vlVVXg7Npq42zMVFsawv+/6pRnVdonIapuc1RtA172DKBKu1Ydla3OoMqzwPfffy969eolDA0NhZ6entDS0hIA5CsxvPbaa2LFihUVLhXcmK5ZQyi/jQ3bj6aF97NxkgghxPOdCjExMZg4cSJe2EwN1I0bN9CtWzdERkZi8uTJmg5HwePHj2FtbY1Vq1bB19dX0+FQNTTk8lXbalJeJRIJoqOj+X6mGiZMmACA70JSzTWE/38sz1RdDaH8Njb8/9a08H42TnU2JwLVDwcHB6xYsQIrVqxAbm6upsNREBgYiD59+sDLy0vToVA1NeTyVdtYXomIiIiIXo6dCE2Av78/JkyYAA8Pj2pNglcXgoKCkJCQgB9++AG6urqaDodqoCGWr9rG8kpHjx6Fv78/9u7dCzs7O/n61f/4xz+U0g4dOhQmJibQ1tZGjx49cOHCBQ1EXH2FhYXo2rWr0tJ0APDtt9+iX79+MDExQceOHTFt2jQ8fPhQvv/777/HunXrqrVqCzU+165dU2mdd9lqBUSNQXOo78vLyxEcHAxXV9cK969YsQLdu3eHqakp9PX14eDggE8++aTCH4zYLlBF2InQRKxevRpeXl747LPPNB0KYmNjUVRUhLi4OJWX1qOGrSGVr9rG8kqffvopwsLCsHjxYowfPx43b96Evb09WrRogZ07d+LQoUMK6X/66Sfs3r0bbm5uSEpKqnIVooYoICBAvjLK86KjozFp0iRMmDABaWlpiI2NxYkTJzB8+HCUlpYCAEaNGgWpVIohQ4bg2bNn9R061bOuXbsqrbhQ0d+uXbs0HSqRSppDfX/9+nW88cYbmD9/fqVLaB8/fhwfffQRUlNTkZmZiTVr1iAkJET+aoEM2wWqDDsRmpChQ4di7dq1mg4Do0ePhr+/P7S1tTUdCtWihlK+altTKK8FBQWV/trQmPLQhLVr12LXrl2IiYmBiYmJwr6wsDBoaWnB09OzyYzCOXXqFK5cuVLhvq+++grt2rXDwoULYWZmhj59+mD+/PlISEhQWM3F29sbvXv3xogRI+QPkUTUODWn9qM51PeXLl3CokWLMHv2bPTp06fSdMbGxvD09ISlpSVMTEzg7u6OsWPH4siRI7h79648HdsFqgw7EYiIGrnt27cjPT290edR327cuIGlS5di+fLlkEqlSvtdXV3h4+ODe/fuYcGCBRqIsHYVFBRg4cKFCAkJqXD/3bt3YWVlBYlEIt/WoUMHAMDt27cV0gYGBiIhIaHScxFR49Bc2o/mUt/37t0be/fuxaRJk6Cvr19puoMHDyr9eNKyZUsAUBi9wHaBKsNOBCKieiaEQFBQELp16wZ9fX1YWFhgzJgxuHbtmjyNl5cX9PT00LZtW/m2uXPnwsjICBKJBJmZmQAAHx8f+Pr6IiUlBRKJBA4ODggLC4NUKkXr1q0xa9YsWFlZQSqVwtXVVeGXg5rkAQBHjhxRa633hiYsLAxCCIwaNarSNKtWrUKXLl2wbds2HD16tMrzqXJfIyIiYGRkBENDQ8TGxmL48OEwNTWFtbU1oqKiFM5XVlaGZcuWwcbGBgYGBujVqxeio6Or/XkDAgIwd+5ctGrVqsL9dnZ2Sg/6svde7ezsFLZbWFhg8ODBCAkJ4WpORPWI7Uf1NLf6vjru3bsHAwMD2NrayrexXaBKvbjmY3R0tKhgMxERVQJqrvO9bNkyoaenJ7755hvx7NkzcfnyZfHqq6+Kli1biocPH8rTTZo0SbRp00bh2A0bNggAIiMjQ75t/Pjxwt7eXiGdp6enMDIyElevXhWFhYUiKSlJ9OvXT5iYmIg7d+7USh4HDx4UJiYmYsWKFSp/dpmGsC60nZ2d6N69e4X77O3txa1bt4QQQpw6dUpoaWmJTp06idzcXCGEEIcPHxajR49WOEbV+xoQECAAiGPHjomsrCyRnp4uBg0aJIyMjERxcbE83YIFC4S+vr7Ys2ePePr0qVi8eLHQ0tIS586dU/uzxsfHi1GjRgkhhMjIyBAAREBAgEKauLg4oaurK8LCwkR2dra4cuWK6Natm3j33XcrPKe/v78AIC5evKh2PLVJ3f9/daEhlGdqnNh+1E/70Zzqe5nXX39d9O7dW6W0eXl5wsTERHh5eSlsr492gfVn48SRCERE9aigoABBQUEYN24cJk+eDDMzMzg5OWHz5s3IzMzEli1bai0vHR0d+a8k3bt3R0REBHJychAZGVkr5x85ciSys7OxdOnSWjlffcrLy8OtW7dgb2//0rQuLi6YN28eUlNTsWjRogrTVOe+urq6wtTUFK1atYKHhwfy8vJw584dAH+uoBAREYGxY8di/PjxMDc3x5IlS6Crq6v2/SsoKICPjw8iIiKqTDd48GD4+fnBy8sLpqam6NmzJ3JycrBt27YK03fu3BkAkJiYqFY8RFQ9bD+qpznV99W1Zs0aWFlZYdWqVQrb2S5QZdiJQERUj5KSkpCbmwtnZ2eF7f369YOenp7CcNHa5uzsDENDQ4Xhls1Veno6hBAwNDRUKf2qVavg6OiI8PBwxMfHK+2v6X3V09MDAJSUlAAAkpOTkZ+fj549e8rTGBgYoG3btmrfv8WLF2PmzJlo3759lekCAgKwZcsWHDt2DLm5ubh58yZcXV3h4uKiMNGWjOzaPXr0SK14iKh62H5UT3Oq76tj3759iImJwY8//qg04STbBaoMOxGIiOqRbPkjY2NjpX3m5ubIycmp0/z19fWRkZFRp3k0BoWFhQBQ5cRTz5NKpYiMjIREIsH06dNRUFCgsL+272teXh4AYMmSJfI1zCUSCW7fvl3pkl0ViY+PR2JiIj788MMq0z148ADr1q3DzJkz8fbbb8PIyAi2trbYunUr7t+/jw0bNigdY2BgAOCva0lEdYvtR/U0l/q+Onbt2oW1a9ciLi4OnTp1UtjHdoGqwk4EIqJ6ZG5uDgAVPmQ8e/YM1tbWdZZ3SUlJnefRWMgedMrKylQ+xsXFBfPnz8f169excuVKhX21fV9lkx8GBwdDCKHwd/r0aZXPs337dhw7dgxaWlryB1PZuVevXg2JRILz58/j+vXrKCsrQ7t27RSONzU1haWlJZKSkpTOXVxcDOCva0lEdYvtR/U0l/peXRs3bsTOnTtx/PhxpbofANsFqhI7EYiI6lHPnj1hbGyM8+fPK2w/e/YsiouL0bdvX/k2HR0d+XDH2hAXFwchBPr3719neTQWrVu3hkQiUXs98JUrV6Jr1664ePGiwnZ17qsqOnToAKlUioSEBLWOe1FkZKTSQ6nsl8SAgAAIIeDs7Cx/6H3w4IHC8Tk5OXjy5Il8Sa/nya5dmzZtahQjEamG7Uf1NJf6XlVCCPj5+SExMRH79++vcEQFALYLVCV2IhAR1SOpVApfX1/s27cPO3fuRHZ2NhITEzF79mxYWVnB09NTntbBwQFPnjzB/v37UVJSgoyMDKV1mQHA0tIS9+/fR2pqKnJycuQPdeXl5Xj69ClKS0tx+fJl+Pj4wMbGBlOnTq2VPA4fPtxol3g0NDSEnZ0d0tLS1DpONsz1xfW11bmvquYzbdo0REVFISIiAtnZ2SgrK0NaWpr8gc7DwwNt2rTBhQsX1Dp3RWxtbfHWW29h69atOHHiBAoKCnD37l153P/85z+VjpFdOycnpxrnT0Qvx/ajeljfK7p69SrWr1+PrVu3QldXV+EVColEgs8//xwA2wV6iReXa+ASj0RE6oGaS3SVl5eLDRs2iM6dOwtdXV1hYWEhxo4dK5KTkxXSPX78WLz11ltCKpUKW1tb8fHHH4uFCxcKAMLBwUG+1NaFCxdEx44dhYGBgRg4cKB4+PCh8PT0FLq6uqJ9+/ZCR0dHmJqaijFjxoiUlJRay+OHH34QJiYmYtWqVWpfs4awpJOXl5fQ1dUV+fn58m379u0T9vb2AoBo2bKl+Oijjyo8duHChUpLfqlyX8PDw4WhoaEAIDp37ixSUlLEli1bhKmpqQAgOnbsKP744w8hhBBFRUXCz89P2NjYCB0dHdGqVSsxfvx4kZSUJIQQYuzYsQKAWLZsmVqfu7IlHjMzM4WPj49wcHAQ+vr6wtjYWAwYMEB89913FZ5n5MiRon379qK8vFyt/Gubuv//6kJDKM/UOLH9qJ/2o7nU96dPnxYDBgwQVlZWAoAAINq2bStcXV3FL7/8IoQQIjExUb6vor8NGzbIz1cf7QLrz8ZJIoQQz3cqxMTEYOLEiXhhMxERVUIikSA6Ohru7u6aDkVu1qxZ2L17Nx4/fqzpUCo0YcIEAMDu3bs1FsONGzfQrVs3REZGYvLkyRqLo7rKy8vx5ptvYurUqZg+fXq95v348WNYW1tj1apV8PX1rde8X9QQ/v81hPJMjVNDKL8vaortB+v7ulfddoH1Z+PE1xmIiJoodSaRao4cHBywYsUKrFixArm5uZoORy1lZWXYv38/cnJy4OHhUe/5BwYGok+fPvDy8qr3vImo7jW19oP1fd1ju9C8sBOBiIiaLX9/f0yYMAEeHh5qT7qlSXFxcdi7dy8OHz6s8trntSUoKAgJCQn44YcfoKurW695ExFVF+v7usN2oflhJwIRUROzePFiREZGIisrC7a2ttizZ4+mQ2rQVq9eDS8vL3z22WeaDkVlQ4YMwX/+8x+0bdu2XvONjY1FUVER4uLiYGFhUa95E1Hda+rtB+v72sd2oXnS0XQARERUu9asWYM1a9ZoOoxGZejQoRg6dKimw2jwRo8ejdGjR2s6DCKqI82h/WB9X7vYLjRPHIlARERERERERCphJwIRERERERERqYSdCERERERERESkEnYiEBEREREREZFKKp1YMSYmpj7jICJq1E6fPq1SurKyMmhra9dxNA1fWloaALY11HSkpaWxPDcQja2eVbX9oD+x/Wha0tLSYG1trekwSE0SIYR4fkNMTAwmTpyoqXiIiIiI1BIdHQ13d3eN5T9hwoQmtxQeEVF9ee+997B7925Nh0FqUOpEICKiunPkyBGsWbMGJ0+exMCBA7Fo0SKMGDECEolE06ERETU6JSUl2LVrF4KCgpCQkIA333wTCxcuxIgRIzQdGhFRk8U5EYiI6tGwYcNw4sQJnDx5Eubm5nBzc0Pv3r2xY8cOlJaWajo8IqJGIScnB6GhobC3t8fUqVNhbW2N06dP4+eff2YHAhFRHeNIBCIiDUpMTMSGDRsQFRUFa2tr+Pj4YObMmTAwMNB0aEREDU5qaio2b96Mr776CmVlZZg2bRrmz5+Pjh07ajo0IqJmg50IREQNQGpqKoKDg7F161aYmJhg9uzZ8PHxgbm5uaZDIyLSuIsXLyI4OBhRUVFo2bIlPD094e3tDQsLC02HRkTU7LATgYioAUlPT0dERARCQ0Plv7L5+fmhXbt2mg6NiKheCSFw7NgxhIaG4uDBg+jduzfmz5+P999/H7q6upoOj4io2WInAhFRA5STk4Ovv/4a69evx+PHj+Hu7o6lS5eic+fOmg6NiKhOFRUVITo6GuvWrcPVq1cxYMAA+Pn54e9//zsnoSUiagA4sSIRUQNkYmICb29v3Lx5E1u2bMGZM2fQtWtXuLu7IykpSdPhERHVuoyMDKxbtw52dnaYMWMG+vbti8TERMTHx8PNzY0dCEREDQRHIhARNQLl5eXYu3cvli9fjqtXr2LkyJFYvHgxXFxcNB0aEVGNpKSkICwsDNu2bYOuri7+7//+D5988gnat2+v6dCIiKgCHIlARNQIaGlpYcKECUhMTERsbCweP34MV1dXDBw4EAcOHAD7g4mosYmPj4e7uzscHR1x8OBBrFmzBvfu3UNoaCg7EIiIGjB2IhARNSISiQRubm44deoUTp48CQsLC4wePRqvvPIKduzYgdLSUk2HSERUqfLychw4cACurq4YNGgQbt68ia+//hp//PEHvL29YWRkpOkQiYjoJdiJQETUSMlGIVy8eBG9evXCP//5Tzg6OiI0NBSFhYWaDo+ISC43NxdbtmxBt27dMGbMGLRo0QLx8fE4f/48pkyZAm1tbU2HSEREKuKcCERETcTNmzcRGhqKLVu2wMzMDLNmzcK8efNgZmam6dCIqJl6+PAhNm/ejI0bN6KoqAiTJk3C/Pnz4ejoqOnQiIiomtiJQETUxDx69AhffvklQkJCIITA1KlT4e/vj7Zt22o6NCJqJi5fvozw8HDs2LFD3qn58ccfo0WLFpoOjYiIaoidCERETVR2djYiIyOxdu1a5OTk4J///CcWLFiADh06aDo0Imqi4uPjsW7dOhw6dAgODg6YO3cuZs6cCQMDA02HRkREtYRzIhARNVGmpqbw9vbGjRs3sHr1anz33Xewt7fHlClT8Pvvv2s6PCJqIoqLi7Fjxw44OTlh0KBBePr0KWJjY5GcnAxvb292IBARNTHsRCAiauKMjIzg7e2NlJQUbNu2DefPn0fPnj3h5uaGs2fPajo8ImqksrOzERoaCnt7e3z44Yfo1q0bzp49i/j4eLi5uUEikWg6RCIiqgPsRCAiaiZ0dXUxZcoUXLlyBfv370dGRgb69+8vX+WBiEgVt27dgre3N9q1a4elS5di3LhxSElJQUxMDF577TVNh0dERHWMnQhERM2MlpYW3NzccObMGZw8eRIWFhYYNWoUXnnlFezYsQNlZWWaDpGIGqDffvsNU6ZMQZcuXfD9999j6dKluHPnDkJDQznXChFRM8JOBCKiZkw2CuHChQtwcnLC9OnT4ejoiNDQUBQVFWk6PCLSsPLychw4cADvvPMOnJ2dceXKFWzfvh3Xr1+Hn58fzM3NNR0iERHVM3YiEBGRfBRCcnIyRo4cCT8/P3Tp0gWhoaHIz8/XdHhEVM+KioqwY8cO9OjRA2PGjAEAfP/997hw4QKmTJkCHR0dDUdIRESawiUeiYhIyZ07d/DFF19g27ZtMDQ0xNy5c+Hl5QVLS0tNh0ZEdSg9PR0RERHYtGkTcnNz4e7ujkWLFqF79+6aDo2IiBoIdiIQEVGlMjMzsWnTJmzcuBHFxcWYPn06Fi5cCGtra02HRkS16Pr169i0aRO2bt0KY2NjTJ8+HV5eXmjXrp2mQyMiogaGnQhERPRSubm52L59Oz7//HOkp6dj4sSJCAgIgKOjo6ZDI6IaiI+Px7p163Do0CHY2dnh448/xowZM2BoaKjp0IiIqIHinAhERPRSxsbG8Pb2RkpKCrZu3Yr//e9/6N69O9zc3HDu3DlNh0dEapBNlti/f38MGjQIT58+RXR0NJKTk+Ht7c0OBCIiqhI7EYiISGV6enqYMmUKrl69iv379+PRo0d47bXX5Ks8EFHDlZOTg9DQUNja2mLMmDFo1aoVTp06hfj4eEyYMAHa2tqaDpGIiBoBdiIQEZHatLS04Obmhv/97384efIkLCwsMGrUKPTt2xe7d+8G35QjajgePHiAwMBAdOzYEUuWLMGwYcPw+++/48CBA3BxcdF0eERE1MhwTgQiIqoVFy5cwNq1a7Fnzx706NEDCxcuxAcffMCl4Ig0JCEhAUFBQdi1axdatGgBT09PrrJCREQ1xk4EIiKqVVeuXMH69esRFRUFa2tr+Pj4cKI2onoihMCxY8cQGhqKgwcPonfv3pgzZw6mTJkCqVSq6fCIiKgJYCcCERHVidTUVAQHB8uXjJszZw68vb1hYWGh6dCImpzi4mLs2rUL69evR1JSEgYMGAA/Pz/8/e9/h0Qi0XR4RETUhLATgYiI6lRGRgbCw8MRFhaG0tJSTJs2DX5+flx/nqgWZGZmYvv27QgLC0NmZiYmTpyITz75BD179tR0aERE1ESxE4GIiOpFTk4Ovv76a6xfvx6PHz+Gu7s7li5dis6dO2s6NKJGJyUlBWFhYdi2bRt0dHQwdepULFy4ENbW1poOjYiImjh2IhARUb0qKipCdHQ0Vq1ahZSUFIwYMQKBgYHo27evpkMjavB+++03hIaG4ttvv4WNjQ28vb3x4YcfwsjISNOhERFRM8ElHomIqF7p6+tjypQpuHbtGvbv348HDx6gX79+cHNzw6lTpzQdHlGDU15ejgMHDmDAgAFwdnbG1atX8fXXX+OPP/6At7c3OxCIiKhesROBiIg0QktLC25ubjh37hxiY2Px5MkTDBgwAAMHDsSBAwfAgXLU3OXm5mLLli3o1q0bxowZA0tLS/z3v//F+fPnMWXKFC6fSkREGsFOBCIi0iiJRAI3Nzf8+uuvOHnyJCwsLDB69Gj06dMHO3bsQGlpqaZDJKpXjx49QmBgIDp27AgvLy+8/vrrSEpKwoEDB/C3v/1N0+EREVEzxzkRiIiowbl8+TI+//xzREVFoUOHDvD29sbMmTNhYGCg6dCI6szly5cRHh6OHTt2wNTUFLNnz8bHH3+MFi1aaDo0IiIiOXYiEBFRg3Xr1i2EhIRg69atMDU1xaxZs+Dj4wNzc3NNh0ZUa+Lj47Fu3TocOnQIDg4OmDt3LjvNiIioweLrDERE1GDZ2toiNDQUt27dwqxZsxAaGoqOHTvC29sbDx48UOkcjx49wh9//FHHkRIBd+/eVTltcXExdu/ejddeew2DBg3C06dPERsbi+TkZHh7e7MDgYiIGix2IhARUYPXpk0bBAYG4vbt21ixYgV2794NW1tbeHp64s6dO1UeGxISgkGDBuHatWv1FC01R+Hh4ejfvz+Ki4urTJednY3Q0FA4ODjg/fffR5s2bXDmzBnEx8fDzc0NEomkniImIiKqHr7OQEREjU5RURH+/e9/Y/Xq1Xjw4AE8PDywaNEidO/eXSFdVlYW2rdvj/z8fFhaWuLEiRNKaYhqat26dfD39wcAfP3115g6dapSmtTUVGzevBmbN29GeXk5pk2bBl9fX9jY2NRztERERDXDkQhERNTo6OvrY+bMmbhx4wa2bduG3377DU5OTnBzc8OZM2fk6SIiIlBUVAQhBLKysjBw4EAkJiZqMHJqatauXYtFixZBCAGJRIK1a9cqLE964cIFTJkyBZ07d8aOHTvg4+OD27dvIzQ0lB0IRETUKHEkAhERNXrl5eU4dOgQ1qxZgzNnzmDAgAGYN28eZs2ahczMTHk6HR0dGBgY4Pjx43B2dtZgxNTYCSHg6+uLkJAQvPgodfjwYZSUlCAsLAxHjx5Fnz59MG/ePLz//vvQ1dXVUMRERES1g50IRETUpMhmuj937hwyMzNRVlamsF/WkXDs2DH069dPQ1FSY1ZWVgZPT09ERkaivLxcYZ+Ojg4MDQ2Rk5ODkSNHwtfXF2+++aZmAiUiIqrHeLmUAAAgAElEQVQD7EQgIqImp6ysDJ06dcK9e/eUfiUGAG1tbXlHwmuvvaaBCKmxKisrw9SpU/Htt98qdSA8b9++fRg7dmw9RkZERFQ/OCcCERE1OVFRUZV2IAB/fhEsKCjA22+/rTCHAlFViouL8d577yEqKqrKDgRdXV3s27evHiMjIiKqPxyJQERETYoQAt26dcP169er/KIH/DkiQSqV4r///S9cXFzqKUJqjPLz8zFq1Cj88ssvKC0tfWl6bW1t3Lp1Cx06dKiH6IiIiOoPRyIQEVGTcuDAASQnJ7+0AwH4c0RCYWEhhgwZgvj4+HqIjhqjrKwsDBkyROUOBODPyT7Dw8PrODIiIqL6x04EIiJqUm7fvo1hw4bB0dERZmZmCvskEgn09fVhYGAAbW1tAH91JLzzzjs4ceKEJkKmBiwzMxNvvPEGzpw5o9SBoKurC319/QpXXNDR0cHBgwdRXFxcX6ESERHVC77OQNSAxcTEYOLEiZoOg4iIiKjOvPfee9i9e7emwyAiFeloOgAierno6GhNh0DU5OXk5ODp06fIzc1F9+7dNR1OjQQHBwMA5s2bp+FIGo/Tp08jJCREob69e/cuSkpKYGZmBlNT0wpHHBBRzcjqKyJqPNiJQNQIuLu7azoEImpEZL/ose5QT0hICK8ZUT3jCASixodzIhARERERERGRStiJQEREREREREQqYScCEREREREREamEnQhEREREREREpBJ2IhARERERERGRStiJQERERBX64YcfYGZmhgMHDmg6lAZp1qxZkEgk8r/JkycrpTl69Cj8/f2xd+9e2NnZydP+4x//UEo7dOhQmJiYQFtbGz169MCFCxfq42PUWHl5OYKDg+Hq6lrh/hUrVqB79+4wNTWFvr4+HBwc8MknnyA3N1cp7bfffot+/frBxMQEHTt2xLRp0/Dw4UP5/u+//x7r1q1DWVlZrcTeHO6PTGFhIbp27YolS5Yo7avudd+/f7/C/4GWLVvW+ecgIs1jJwIRERFVSAih6RAaPEtLSxw+fBjJycnYvn27wr5PP/0UYWFhWLx4McaPH4+bN2/C3t4eLVq0wM6dO3Ho0CGF9D/99BN2794NNzc3JCUl4dVXX63Pj1It169fxxtvvIH58+cjPz+/wjTHjx/HRx99hNTUVGRmZmLNmjUICQnBhAkTFNJFR0dj0qRJmDBhAtLS0hAbG4sTJ05g+PDhKC0tBQCMGjUKUqkUQ4YMwbNnz2oUe3O4P88LCAhAcnKy0vaaXPfRo0cjLS0NJ06cwIgRI+rtsxCRZrETgYiIiCo0cuRIZGVlwc3NTdOhoKCgoNJfujXJwMAAw4YNQ5cuXaCvry/fvnbtWuzatQsxMTEwMTFROCYsLAxaWlrw9PREVlZWfYdcay5duoRFixZh9uzZ6NOnT6XpjI2N4enpCUtLS5iYmMDd3R1jx47FkSNHcPfuXXm6r776Cu3atcPChQthZmaGPn36YP78+UhISMDZs2fl6by9vdG7d2+MGDFC/iVXXc3h/jzv1KlTuHLlSoX7anLdJRIJ2rdvj0GDBqFz58718lmISPPYiUBEREQN3vbt25Genq7pMFRy48YNLF26FMuXL4dUKlXa7+rqCh8fH9y7dw8LFizQQIS1o3fv3ti7dy8mTZqk0IHyooMHD0JbW1thm2zY+/OjF+7evQsrKytIJBL5tg4dOgAAbt++rXB8YGAgEhISEBISonbczeX+yBQUFGDhwoWVXqv6uu5E1HSwE4GIiIiUxMfHw8bGBhKJBJs2bQIAREREwMjICIaGhoiNjcXw4cNhamoKa2trREVFyY8NCwuDVCpF69atMWvWLFhZWUEqlcLV1VXhl00vLy/o6emhbdu28m1z586FkZERJBIJMjMzAQA+Pj7w9fVFSkoKJBIJHBwcAABHjhyBqakpVq9eXR+XRGVhYWEQQmDUqFGVplm1ahW6dOmCbdu24ejRo1WeTwiBoKAgdOvWDfr6+rCwsMCYMWNw7do1eRpV7w0AlJWVYdmyZbCxsYGBgQF69eqF6Ojomn1oNd27dw8GBgawtbWVb7Ozs1PqKJK9l29nZ6ew3cLCAoMHD0ZISIjar900t/sTEBCAuXPnolWrVhXur6/rTkRNBzsRiIiISMnAgQNx6tQphW1z5szBvHnzUFBQABMTE0RHRyMlJQV2dnaYMWMGSkpKAPzZOTB16lTk5+fD29sbqampuHDhAkpLS/HOO+/Ih7CHhYXB3d1dIY/w8HAsX75cYVtISAjc3Nxgb28PIQRu3LgBAPJJ3srLy+vkGlTXoUOH4OjoCENDw0rTGBgY4F//+he0tLQwY8YM5OXlVZo2MDAQ/v7+CAgIQHp6Ok6cOIG7d+9i0KBBePToEQDV7w0ALFq0COvXr0dwcDAePHgANzc3fPDBBzh//nztXYQq5Ofn4/jx45gxYwb09PTk2xcvXoyHDx9i48aNyMnJQVJSEkJCQvDuu++if//+Sud55ZVXcO/ePVy6dEmt/JvT/fn111+RkpKCDz74oNI09XXdiajpYCcCERERqc3V1RWmpqZo1aoVPDw8kJeXhzt37iik0dHRkf862717d0RERCAnJweRkZG1EsPIkSORnZ2NpUuX1sr5akNeXh5u3boFe3v7l6Z1cXHBvHnzkJqaikWLFlWYpqCgAEFBQRg3bhwmT54MMzMzODk5YfPmzcjMzMSWLVuUjqnq3hQWFiIiIgJjx47F+PHjYW5ujiVLlkBXV7fW7svLrFmzBlZWVli1apXC9sGDB8PPzw9eXl4wNTVFz549kZOTg23btlV4Htk7+ImJiSrn3ZzuT0FBAXx8fBAREVFluvq47kTUtLATgYiIiGpE9mvy87+mVsTZ2RmGhoYKw7ybmvT0dAghqvyV+3mrVq2Co6MjwsPDER8fr7Q/KSkJubm5cHZ2Vtjer18/6OnpKbweUpEX701ycjLy8/PRs2dPeRoDAwO0bdu2Xu7Lvn37EBMTgx9//FFpQsOAgABs2bIFx44dQ25uLm7evAlXV1e4uLgoTMAoI7vGsl/7VdGc7s/ixYsxc+ZMtG/fvsp09XHdiahpYScCERER1Rt9fX1kZGRoOow6U1hYCABVTjT4PKlUisjISEgkEkyfPh0FBQUK+2XL6RkbGysda25ujpycHLXikw3LX7JkCSQSifzv9u3blS7RWFt27dqFtWvXIi4uDp06dVLY9+DBA6xbtw4zZ87E22+/DSMjI9ja2mLr1q24f/8+NmzYoHQ+AwMDAH9dc1U0l/sTHx+PxMREfPjhh1Wmq6/rTkRNCzsRiIiIqF6UlJTg2bNnsLa21nQodUb2BUs2X4MqXFxcMH/+fFy/fh0rV65U2Gdubg4AFX4Zrc61lE2uFxwcDCGEwt/p06fVOpc6Nm7ciJ07d+L48eNo166d0v7r16+jrKxMaZ+pqSksLS2RlJSkdExxcTGAv665KprL/dm+fTuOHTsGLS0teUeE7NyrV6+GRCLB+fPn6+26E1HTwk4EIiIiqhdxcXEQQihM1qajo/PS1yAak9atW0MikSArK0ut41auXImuXbvi4sWLCtt79uwJY2NjpUn1zp49i+LiYvTt21etfDp06ACpVIqEhAS1jqsuIQT8/PyQmJiI/fv3V/iLPQD5l+0HDx4obM/JycGTJ0/kSw4+T3aN27Rpo3I8zeX+REZGKnVCyEYABQQEQAgBZ2fnervuRNS0sBOBiIiI6kR5eTmePn2K0tJSXL58GT4+PrCxscHUqVPlaRwcHPDkyRPs378fJSUlyMjIUFqbHgAsLS1x//59pKamIicnByUlJTh8+HCDW+LR0NAQdnZ2SEtLU+s42bB5bW1tpe2+vr7Yt28fdu7ciezsbCQmJmL27NmwsrKCp6en2vlMmzYNUVFRiIiIQHZ2NsrKypCWlib/Iunh4YE2bdrg/7F373FVVfn/x99HbgcEAe8kYQpqXjAznZQ0NctKH95CBcvmSxd/XkpFbMa0m1cSmxEflkyTGfMtzRAtcUZt+jqPGKeZ0S5eozLFvJd4Q1BQbuv3hw9Onbh4DgIH5fV8PM4frL32Wp+99j7A+Zy919q5c6dTbZfnm2++0eLFi7VixQp5eHjY3aJvsVj0hz/8QZLUpk0bDRgwQCtWrNC2bduUn5+vY8eO2Y7vqaeeKtN26RiHh4c7HDfnx151jDuA+ockAgAAKOONN95Qz549JUkzZ87U8OHDlZSUpMTERElS165ddejQIa1YsUIzZsyQJD300EM6cOCArY3Lly8rPDxc3t7e6tu3r9q3b69PP/3U7nn0yZMna8CAARo7dqw6dOig+fPn226T/uXEbpMmTVLz5s3VqVMnDR48WOfOnauVcaiKIUOGKCMjw+75+Y8++khhYWHKzMxUz549NWXKlDL79erVS3FxcWXKX3nlFcXHx2vevHlq2rSp+vXrp9tuu03p6elq2LChJDl1bpYuXarp06crISFBTZo0UVBQkGJjY3X+/HlJV29Xz8rKUlpaWqXHuX37dvXp00e33HKLduzYoT179igoKEj33HOPtm3bJunqnQiOsFgsSk1NVXR0tJ566ikFBgaqU6dOOnr0qNavX6++ffuW2eeLL75Qq1at1LVrV6firi/nxxHVMe4A6h+LcfS3O4Bat3btWkVFRTn8TxgASNLo0aMlSampqS6LYeLEiUpNTdXZs2ddFoMzqvL7duLEifrb3/5W5lvtgwcPqmPHjkpOTta4ceOqO9QaV1JSov79+ysmJkZPPvmkq8Mp19mzZxUcHKwFCxbYPog7Gjfnp+rKG/dSsbGxWrVqlc6cOeNUm3Xh9xUA53AnAgAAqBHOTF53o8rPz9ff//53HThwwDbhXFhYmObNm6d58+bp4sWLLo7QOcXFxdqwYYNyc3MVHR3t6nAqNGfOHHXr1k1Tp06V5FzcnJ+q+/W4G2N08uRJffbZZzp48GCtxwPANUgiAJAkvfrqq/L395fFYqm1CbeqwxNPPCGr1SqLxeLS5aaqO46ePXvKzc1N3bp1q3Ibmzdvlr+/v/76179WWOfpp5+Wn5/fdZ/3/fv3a8qUKercubP8/Pzk7u4uf39/tW/fXkOGDKnRWd8BVzp37pweeughtW/f3u5b4VmzZmn06NGKjo52ehI/V0pPT9f69eu1ZcsW+fj4uDqcci1ZskS7d+/W5s2b5eHhIcn5uDk/zitv3NPS0tSqVSv17dtXmzZtqtV4ALgOSQQAkq7+Q/XnP//Z1WE4LTk5Wc8995yrw6j2OL744gsNGDDgutpw5Lbst99+WytWrLiuflauXKnw8HDt3btXS5Ys0bFjx3Tp0iXt2rVL8+fPV3Z2tvbt23ddfeDGMnv2bCUnJ+vChQtq06aN1q1b5+qQasSbb75pN/v9qlWr7LYvXLhQU6dO1auvvuqiCJ03cOBArV69Wi1btnR1KOVKS0vTlStXlJ6ersDAQFt5VeLm/DiuonEfMWKE3XvA2UcZANyY3F0dAIDqlZ+fr4EDB+o///mPq0NBNbBYLFXed8iQITX+Ddv27ds1YcIE9evXT3//+9/l7v7zn5W2bduqbdu2CggIsJtsr65x5XvmZn2/xsfHKz4+3tVh1AmDBg3SoEGDXB3GTWP48OEaPnx4tbXH+XFMdY87gBsbSQTgJrNy5UplZWW5OgyXuJ4P3NWpOuMovWW0Jl1PvAsWLFBxcbFeffVVuwTCLz344IN68MEHq9xHTXPle6Y+v18BAMCNiccZgJtIbGysZsyYoczMTFksFoWFhUm6elv7kiVL1LFjR3l5eSkwMFAjRozQd999V2l7p06d0m233SZ3d3c99NBDtvLi4mK9/PLLCgkJkbe3t7p27aqUlBRJV5exatiwoXx8fJSWlqaHH35YjRo1UnBwsNasWVPlY3vvvffUo0cPWa1WNWzYULfddpvmz59v296gQQNt2rRJDz/8sPz9/RUUFKR33nnHro1//etf6tSpk/z9/WW1WhUeHq6///3vkqTFixfLx8dHfn5+ysrK0owZM9SqVSvt37/fqTivFcfTTz9tWx89NDRUu3btknR1TgUfHx/5+/tr48aNtvoHDx7U7bffroYNG9qWyfvss89s2yuKe+XKlQoJCZHFYtEbb7xhq2+M0WuvvaYOHTrIy8tL/v7++t3vflfmOD7++GM1atRICxcurPBYCwoK9I9//ENNmjTRb37zG4fHyJHr0dnrqLLro7LzXtF7prqu8eruGwAAwOUMgDorJSXFOPs2jYyMNKGhoXZlL7/8svH09DTvvfeeyc7ONnv37jXdu3c3TZs2NT/99JOt3po1a4wks2vXLmOMMQUFBSYyMtKkpaXZtffcc88ZLy8vs27dOnP+/Hkze/Zs06BBA/PFF18YY4x54YUXjCTzj3/8w1y4cMFkZWWZvn37moYNG5qCggKnxyExMdFIMq+++qo5e/asOXfunPnzn/9sHnvssTL9ZWdnm3PnzpnBgwcbLy8vc+nSJVs7qampZs6cOebcuXPm7NmzplevXqZJkya27aXtTJs2zbz++uvmkUceMd9++63DcToaR2RkpHFzczMnTpyw2//RRx81GzdutP08cOBA07ZtW/PDDz+YwsJC8/XXX5u7777bWK1W8/33318z7mPHjhlJ5vXXX7era7FYzB//+Edz/vx5k5eXZ5YvX2533o0x5m9/+5vx8/Mz8+bNq/B4v//+eyPJ9OrVy+ExMsbx69HR6+ha18e1znt575nqusZrom9HjBo1yowaNcrh+qja71sA14/fV8CNh7+WQB1WHUmEvLw84+vra6Kjo+3qff7550aS3YfEXyYRCgsLzdixY82WLVvs9svPzzc+Pj527eXl5RkvLy8zefJkY8zPH7Dy8/NtdUo/qB48eNCp4ykoKDABAQFmwIABduVFRUVm6dKlFfb37rvvGknm66+/rrDt+Ph4I8lkZWVV2I4zHI1j69atRpJZsGCBrezChQumXbt2pqioyFY2cOBAc8cdd9j1sXfvXiPJPPfcc5X2a4wpk0TIy8szPj4+5oEHHrCr9+vkkaO+/PJLI8ncf//9Du/jzPXoyHXkyPXxa78+779+z9TkNV4dfTuCf8qdRxIBcA1+XwE3HuZEAG5yGRkZunjxonr06GFX3rNnT3l6emrHjh1l9ikuLtajjz6qW265xe4xBunqUn55eXnq0qWLrczb21stW7as9PEIT09PSVJhYaFT8e/du1fZ2dllnql3c3PTtGnTKtyvdC6ByvorrVOTa9mXF8d9992n9u3b65133tHs2bNlsVj0wQcfKDo6Wm5ubpW2Fx4eLn9/f+3du9fpWA4ePKi8vDwNHDjQ6X3L4+vrK0nKy8tzeJ+qXI+/9OvrqCrXx7XOe01e4zXVd3mOHz+utWvXOrVPfVa6DCljBtSu48ePKzg42NVhAHACSQTgJpednS3p5w98vxQQEKDc3Nwy5c8++6wuX76sjRs36v/9v/+nTp062bZdunRJkvTiiy/qxRdftNsvKCioOkOXJOXk5NhivV6bNm3Sa6+9poyMDOXk5Did0KguFotFEydOVFxcnP7xj3/o/vvv17vvvqvVq1c7tL+Hh0eVYj9+/LgkqVmzZk7vW57bbrtNVqtV33//vcP7VOV6rIwj14ez5706r3FX9r19+3ZFRUU5tQ/EmAEuMGrUKFeHAMAJTKwI3ORKP1yV9+EsOzu73Oz/mDFj9H//938KCAjQb3/7WxUVFdm2lX4ATUxMtFsb2hhj+yavOt1yyy2SdN1rTx89elQjR45Uy5YttWPHDl24cEEJCQnVEWKVxMTEyGq16u2339b+/fvVqFEjtW7d+pr7FRUV6dy5cwoJCXG6T6vVKkm6cuWK0/uWx8vLSw8++KDOnDmjf//73xXWO3funJ5++mlJVbseK3Ot66Mq5726rnFX9i1d/af8123wqvhVOnmlq+Pgxau+vUggADcekgjATa5Lly7y9fXVl19+aVe+Y8cOFRQU6K677iqzz4ABA9S0aVO99dZb+uqrr7RgwQLbtltvvVVWq1W7d++u8dilq992N27cWJ988sl1tbNv3z4VFhZq8uTJatu2raxWq0uXhAwMDFRUVJQ2bNigP/zhDxo/frxD+3366acqKSlR9+7dne6zS5cuatCggf75z386vW9F5syZIy8vL8XFxSk/P7/cOl9//bVt+ceqXI+Vudb1UZXzXl3XuCv7BgAAqCkkEYCbTOPGjXXy5EkdPnxYubm5cnNz04wZM/Thhx9q1apVysnJ0b59+zRp0iQFBQVpwoQJFbY1bNgwxcTEaOHChfrqq68kXf02+4knntCaNWuUlJSknJwcFRcX6/jx4/rxxx+r/Xi8vLw0e/Zsbdu2TVOnTtWJEydUUlKi3NxcffPNNw63U/rN/datW3X58mUdOHDgms/f17RJkybpypUr+tvf/qahQ4eWW6egoEAXLlxQUVGRdu7cqalTp6p169aKiYlxur9mzZopMjJS69at08qVK5WTk6O9e/fqrbfeKlN3y5Yt11ziUZK6deum1atX6+uvv1bfvn21efNmXbhwQYWFhfrhhx+0YsUKPfXUU7a5AKxWa5Wvx/Jc6/pw5LyX956pjmvclX0DAADUGAOgzqrKbOE7d+40rVu3Nt7e3qZPnz7mp59+MiUlJea1114z7dq1Mx4eHiYwMNCMHDnS7N+/37bf+vXrTWBgoJFkbrvtNpOVlWVycnLMrbfeaiQZX19f8+677xpjjLly5YqZOXOmCQkJMe7u7qZZs2YmMjLSZGRkmOXLlxsfHx8jybRr185kZmaat956yzRq1MhIMq1bt7ZbntBRb7zxhgkPDzdWq9VYrVZz5513muXLl5uEhATj7e1t19+qVatsxxIcHGxbGWHmzJmmcePGJiAgwIwePdq88cYbRpIJDQ01zz77rK2dW2+91bz33ntOxedMHL905513mlmzZpXbZnJyshkwYIBp3ry5cXd3N02aNDFjx441R44cKbffX8b9+uuvm5YtWxpJxsfHxwwbNswYY0xubq55+umnTZMmTYyvr6/p06ePefnll20x7tmzxxhjzObNm42fn5/dChKVOXr0qHnuuedMeHi48fX1NW5ubiYgIMDceeed5qmnnjL//ve/bXUduR6dvY4quj6Mqfy8Hz16tNz3THVd49Xdt6OY7dx5rM4AuAa/r4Abj8UYY2o1awHAYWvXrlVUVJR4m968hgwZojfeeENt2rRxdSi4iYwePVqSlJqa6uJIbhz8vgVcg99XwI2HxxkAoBb9cnb+vXv3ymq1kkAAAADADYMkAoBa991338lisVzzFR0dfdPFOXPmTB04cEDff/+9nnjiCc2fP78GjwAAAACoXiQRANS622+/3aFlnz744IObLk4fHx/dfvvtuv/++zVnzhx16tSpBo8AAKpu69atmjVrltavX6+2bdvaEqePP/54mbqDBg2Sn5+f3Nzc1LlzZ+3cudMFETuvpKREiYmJioiIKHd7//79K0wg+/r62tUtLCxUfHy8wsLC5OnpqYCAAHXp0kWHDx+WJG3cuFEJCQkqLi6u6cMCgBpFEgEAatGCBQtUXFyso0ePVrgiAwC42iuvvKJly5Zp9uzZioyM1KFDhxQaGqomTZpo1apV2rRpk139Tz75RKmpqRo6dKgyMjKqtAxtbTtw4IDuvfdexcXFKS8vz+n9+/TpY/dzVFSU3n33Xa1evVp5eXn69ttvFRoaqosXL0q6uuKR1WrVwIEDlZ2dXS3HAACuQBIBAABUu/z8/Aq/3b2R+qiPFi1apA8++EBr166Vn5+f3bZly5apQYMGmjBhgi5cuOCiCK/fnj179Pzzz2vSpEnq1q1bhfWsVqtycnLK3IE2YcIE/f73v7fV++CDD7Rhwwalpqbq7rvvlru7u4KCgpSWlqYuXbrY6k2bNk133HGHBg8erKKioho9RgCoKSQRAABAtVu5cqWysrJu+D7qm4MHD+qll17S3LlzZbVay2yPiIhQbGysTpw4oeeee84FEVaPO+64Q+vXr9djjz0mLy+vCut9/PHHZRIpx44d09dff6377rvPVvanP/1J3bt3V3h4+DX7njNnjnbv3q2lS5dW/QAAwIVIIgAAABljtGTJEnXs2FFeXl4KDAzUiBEj9N1339nqTJ06VZ6enmrZsqWt7JlnnlHDhg1lsVh05swZSVJsbKxmzJihzMxMWSwWhYWFadmyZbJarWrevLkmTpyooKAgWa1WRUREaMeOHdXSh3T1Q1+jRo20cOHCGh2vm9WyZctkjNGwYcMqrLNgwQK1b99eb7/9trZu3Vppe45cV0lJSWrYsKF8fHyUlpamhx9+WI0aNVJwcLDWrFlj115xcbFefvllhYSEyNvbW127dlVKSsr1HbSTFi1apGnTptl+Ligo0Pbt2yu9o+GXAgMD1a9fPy1dupQlRQHckEgiAAAAzZkzR7NmzdILL7ygrKwsbdu2TceOHVPfvn116tQpSVc/YI4ZM8Zuv+XLl2vu3Ll2ZUuXLtXQoUMVGhoqY4wOHjyoqVOnKiYmRnl5eZo2bZoOHz6snTt3qqioSA888ICOHTt23X1Isk1aV1JSUn2DU49s2rRJHTp0kI+PT4V1vL299Ze//EUNGjTQ+PHjdenSpQrrOnJdTZ48WdOnT1d+fr78/PyUkpKizMxMtW3bVuPHj7dbGvf555/X4sWLlZiYqB9//FFDhw7Vo48+qi+//LL6BqESJ06cUHp6uiIjI21lJ0+eVEFBgb766isNGDDAliDr2LGjli9fXm6i4M4779SJEye0Z8+eWokbAKoTSQQAAOq5/Px8LVmyRI888ojGjRsnf39/hYeH680339SZM2f01ltvVVtf7u7utm+lO3XqpKSkJOXm5io5Obla2h8yZIhycnL00ksvVUt79cmlS5f0ww8/KIBbQ54AACAASURBVDQ09Jp1e/furenTp+vw4cN6/vnny61TlesqIiJCjRo1UrNmzRQdHa1Lly7p6NGjkqTLly8rKSlJI0eOVGRkpAICAvTiiy/Kw8Oj2q6fa1m0aJGmTJmiBg1+/he6dOLEZs2aaeHChcrIyNCpU6c0YsQIPfvss3r//ffLtNOuXTtJ0r59+2olbgCoTiQRAACo5zIyMnTx4kX16NHDrrxnz57y9PS0e9yguvXo0UM+Pj52t7fDNbKysmSMqfQuhF9asGCBOnTooOXLl+uzzz4rs/16rytPT09Jst2JsH//fuXl5dlNVOjt7a2WLVvWyvVz8uRJbdy4UTExMXblpXMqdO7cWREREWrcuLH8/f01d+5c+fv7l5ssKR3j0rsxAOBGQhIBAIB6rnS5uV+vey9JAQEBys3NrdH+vby8dPr06RrtA9d2+fJlSap0osFfslqtSk5OlsVi0ZNPPqn8/Hy77dV9XZU+NvHiiy/KYrHYXkeOHKnSEo3OSkhI0Pjx48tMOBkUFCRJtvk6Snl6eqp169bKzMws05a3t7ekn8ccAG4kJBEAAKjnAgICJKncD3XZ2dkKDg6usb4LCwtrvA84pvSDbem8Eo7o3bu34uLidODAAc2fP99uW3VfV82aNZMkJSYmllly8b///a9TbTnrp59+0vvvv6/JkyeX2ebr66t27drpm2++KbOtqKhI/v7+ZcoLCgok/TzmAHAjIYkAAEA916VLF/n6+paZnG7Hjh0qKCjQXXfdZStzd3e3m+jueqWnp8sYo169etVYH3BM8+bNZbFYdOHCBaf2mz9/vm6//Xbt2rXLrtyZ68oRt956q6xWq3bv3u3UftUhISFB48aNU+PGjcvdHhUVpV27dunQoUO2sry8PB05cqTcZR9Lx7hFixY1EzAA1CCSCAAA1HNWq1UzZszQhx9+qFWrViknJ0f79u3TpEmTFBQUpAkTJtjqhoWF6dy5c9qwYYMKCwt1+vRpHTlypEybjRs31smTJ3X48GHl5ubakgIlJSU6f/68ioqKtHfvXsXGxiokJMTuOfPr6WPLli0s8VhFPj4+atu2rY4fP+7UfqWPNbi5uZUpd/S6crSfJ554QmvWrFFSUpJycnJUXFys48eP68cff5QkRUdHq0WLFtq5c6dTbVfm1KlTeueddzR9+vQK68TFxal169aKiYnR0aNHdfbsWc2cOVP5+fnlTjxZOsblJRgAoK4jiQAAAPTKK68oPj5e8+bNU9OmTdWvXz/ddtttSk9PV8OGDW31Jk+erAEDBmjs2LHq0KGD5s+fb7slu3fv3ralGidNmqTmzZurU6dOGjx4sM6dOyfp6jPg4eHh8vb2Vt++fdW+fXt9+umnds/hX28fqLohQ4YoIyPDbn6Djz76SGFhYcrMzFTPnj01ZcqUMvv16tVLcXFxZcodua6SkpKUmJgoSeratasOHTqkFStWaMaMGZKkhx56SAcOHJB0dWnP6dOnKyEhQU2aNFFQUJBiY2N1/vx5SVcfE8jKylJaWlqlx7l9+3b16dNHt9xyi3bs2KE9e/YoKChI99xzj7Zt22ZXd/HixRo2bJhCQkIqbC8wMFD/+te/FBwcrG7duqlVq1b6/PPPtWnTJnXr1q1M/S+++EKtWrVS165dK40TAOoiiylv8VoAdcLatWsVFRVV7hrTAFCR0aNHS5JSU1NdHIm9iRMnKjU1VWfPnnV1KGXw+/aqgwcPqmPHjkpOTta4ceNcHY7TSkpK1L9/f8XExOjJJ590dTjlOnv2rIKDg7VgwQJboqQ+q6u/rwBUjDsRAABArXFm0j7UvrCwMM2bN0/z5s3TxYsXXR2OU4qLi7Vhwwbl5uYqOjra1eFUaM6cOerWrZumTp3q6lAAoEpIIgAAAMBm1qxZGj16tKKjo52eZNGV0tPTtX79em3ZskU+Pj6uDqdcS5Ys0e7du7V582Z5eHi4OhwAqBKSCAAAoMbNnj1bycnJunDhgtq0aaN169a5OiRUYuHChZo6dapeffVVV4fisIEDB2r16tVq2bKlq0MpV1pamq5cuaL09HQFBga6OhwAqDJ3VwcAAABufvHx8YqPj3d1GHDCoEGDNGjQIFeHcdMYPny4hg8f7uowAOC6cScCAAAAAABwCEkEAAAAAADgEJIIAAAAAADAISQRAAAAAACAQ5hYEbgBjB492tUhALiBbN++XRK/O5xx/PhxSYwZUNu2b9+uXr16uToMAE6wGGOMq4MAUL7//ve/WrJkiavDAFCPbNmyRXfeeWedXSYPwM2nd+/eiouLc3UYABxEEgEAANhYLBalpKRozJgxrg4FAADUQcyJAAAAAAAAHEISAQAAAAAAOIQkAgAAAAAAcAhJBAAAAAAA4BCSCAAAAAAAwCEkEQAAAAAAgENIIgAAAAAAAIeQRAAAAAAAAA4hiQAAAAAAABxCEgEAAAAAADiEJAIAAAAAAHAISQQAAAAAAOAQkggAAAAAAMAhJBEAAAAAAIBDSCIAAAAAAACHkEQAAAAAAAAOIYkAAAAAAAAcQhIBAAAAAAA4hCQCAAAAAABwCEkEAAAAAADgEJIIAAAAAADAISQRAAAAAACAQ0giAAAAAAAAh5BEAAAAAAAADiGJAAAAAAAAHEISAQAAAAAAOIQkAgAAAAAAcAhJBAAAAAAA4BCSCAAAAAAAwCEkEQAAAAAAgENIIgAAAAAAAIeQRAAAAAAAAA5xd3UAAADANbKzs2WMKVN+6dIlnT9/3q7M19dXHh4etRUaAACooyymvP8eAADATe++++7Tp59+es16bm5uOnHihFq0aFELUQEAgLqMxxkAAKinxo4dK4vFUmmdBg0a6N577yWBAAAAJJFEAACg3ho1apTc3St/stFisei3v/1tLUUEAADqOpIIAADUU4GBgRo0aJDc3NwqrNOgQQONHDmyFqMCAAB1GUkEAADqsXHjxqmkpKTcbe7u7hoyZIj8/f1rOSoAAFBXkUQAAKAeGzZsmLy8vMrdVlxcrHHjxtVyRAAAoC4jiQAAQD3m4+OjkSNHlrt8o7e3twYPHuyCqAAAQF1FEgEAgHru0UcfVWFhoV2Zh4eHRo0aJW9vbxdFBQAA6iKSCAAA1HMPPvhgmXkPCgsL9eijj7ooIgAAUFeRRAAAoJ7z8PBQdHS0PD09bWUBAQEaOHCgC6MCAAB1EUkEAACgsWPHqqCgQNLVpMK4cePk7u7u4qgAAEBdYzHGGFcHAQAAXKukpES33HKLTp06JUn67LPPdM8997g4KgAAUNdwJwIAAFCDBg30+OOPS5KCgoIUERHh4ogAAEBdxH2KAFDN1q5d6+oQgCpp2rSpJOnuu+9Wamqqi6MBqiYiIkLBwcGuDgMAblo8zgAA1cxisbg6BACot1JSUjRmzBhXhwEANy3uRACAGsA/sahta9euVVRUlK73u4F169Zp1KhR1RRV3WexWHi/3kRI4gJAzWNOBAAAYFOfEggAAMB5JBEAAAAAAIBDSCIAAAAAAACHkEQAAAAAAAAOIYkAAAAAAAAcQhIBAAAAAAA4hCQCAACw2bx5s/z9/fXXv/7V1aHUeVu3btWsWbO0fv16tW3bVhaLRRaLRY8//niZuoMGDZKfn5/c3NzUuXNn7dy50wURO6+kpESJiYmKiIgod3v//v1tx/3rl6+vr13dwsJCxcfHKywsTJ6engoICFCXLl10+PBhSdLGjRuVkJCg4uLimj4sAMB1IIkAAABsjDGuDuGG8Morr2jZsmWaPXu2IiMjdejQIYWGhqpJkyZatWqVNm3aZFf/k08+UWpqqoYOHaqMjAx1797dRZE77sCBA7r33nsVFxenvLw8p/fv06eP3c9RUVF69913tXr1auXl5enbb79VaGioLl68KEkaNmyYrFarBg4cqOzs7Go5BgBA9XN3dQAAAKDuGDJkiC5cuODqMCRJ+fn5GjhwoP7zn/+4OhQ7ixYt0gcffKA9e/bIarXabVu2bJkef/xxTZgwQRkZGfL393dRlNdnz549mjdvniZNmqRLly5VmFyyWq3KycmRn5+fXfnEiRM1ZswY288ffPCBNmzYoD179ig8PFySFBQUpLS0NLv9pk2bpkOHDmnw4MHatm2b3N35VxUA6hruRAAAAHXSypUrlZWV5eow7Bw8eFAvvfSS5s6dWyaBIEkRERGKjY3ViRMn9Nxzz7kgwupxxx13aP369Xrsscfk5eVVYb2PP/64TALh2LFj+vrrr3XffffZyv70pz+pe/futgRCZebMmaPdu3dr6dKlVT8AAECNIYkAAAAkSZ999plCQkJksVj0xhtvSJKSkpLUsGFD+fj4KC0tTQ8//LAaNWqk4OBgrVmzxrbvsmXLZLVa1bx5c02cOFFBQUGyWq2KiIjQjh07bPWmTp0qT09PtWzZ0lb2zDPPqGHDhrJYLDpz5owkKTY2VjNmzFBmZqYsFovCwsIkXf3Q2qhRIy1cuLA2hqSMZcuWyRijYcOGVVhnwYIFat++vd5++21t3bq10vaMMVqyZIk6duwoLy8vBQYGasSIEfruu+9sdRw9B5JUXFysl19+WSEhIfL29lbXrl2VkpJyfQftpEWLFmnatGm2nwsKCrR9+3Z169bNof0DAwPVr18/LV26lMdrAKAOIokAAAAkXX2G/dePDkyePFnTp09Xfn6+/Pz8lJKSoszMTLVt21bjx49XYWGhpKvJgZiYGOXl5WnatGk6fPiwdu7cqaKiIj3wwAM6duyYpKsfwn95m7skLV++XHPnzrUrW7p0qYYOHarQ0FAZY3Tw4EFJsk26V1JSUiNjcC2bNm1Shw4d5OPjU2Edb29v/eUvf1GDBg00fvx4Xbp0qcK6c+bM0axZs/TCCy8oKytL27Zt07Fjx9S3b1+dOnVKkuPnQJKef/55LV68WImJifrxxx81dOhQPfroo/ryyy+rbxAqceLECaWnpysyMtJWdvLkSRUUFOirr77SgAEDbAmmjh07avny5eUmCu68806dOHFCe/bsqZW4AQCOI4kAAAAcEhERoUaNGqlZs2aKjo7WpUuXdPToUbs67u7utm/VO3XqpKSkJOXm5io5OblaYhgyZIhycnL00ksvVUt7zrh06ZJ++OEHhYaGXrNu7969NX36dB0+fFjPP/98uXXy8/O1ZMkSPfLIIxo3bpz8/f0VHh6uN998U2fOnNFbb71VZp/KzsHly5eVlJSkkSNHKjIyUgEBAXrxxRfl4eFRbeN/LYsWLdKUKVPUoMHP/2KWTpzYrFkzLVy4UBkZGTp16pRGjBihZ599Vu+//36Zdtq1aydJ2rdvX63EDQBwHEkEAADgNE9PT0my+xa8PD169JCPj4/d7fk3qqysLBljKr0L4ZcWLFigDh06aPny5frss8/KbM/IyNDFixfVo0cPu/KePXvK09PT7jGQ8vz6HOzfv195eXnq0qWLrY63t7datmxZK+N/8uRJbdy4UTExMXblpXMqdO7cWREREWrcuLH8/f01d+5c+fv7l5ssKR3j0rsxAAB1B0kEAABQo7y8vHT69GlXh3HdLl++LEmVTjT4S1arVcnJybJYLHryySeVn59vt710GUNfX98y+wYEBCg3N9ep+Eofm3jxxRdlsVhsryNHjlRpiUZnJSQkaPz48WUmnAwKCpIk23wXpTw9PdW6dWtlZmaWacvb21vSz2MOAKg7SCIAAIAaU1hYqOzsbAUHB7s6lOtW+sG2dF4GR/Tu3VtxcXE6cOCA5s+fb7ctICBAkspNFlRlzJo1ayZJSkxMlDHG7vXf//7Xqbac9dNPP+n999/X5MmTy2zz9fVVu3bt9M0335TZVlRUVO4ymAUFBZJ+HnMAQN1BEgEAANSY9PR0GWPUq1cvW5m7u/s1H4Ooi5o3by6LxaILFy44td/8+fN1++23a9euXXblXbp0ka+vb5lJD3fs2KGCggLdddddTvVz6623ymq1avfu3U7tVx0SEhI0btw4NW7cuNztUVFR2rVrlw4dOmQry8vL05EjR8pd9rF0jFu0aFEzAQMAqowkAgAAqDYlJSU6f/68ioqKtHfvXsXGxiokJMTuOfmwsDCdO3dOGzZsUGFhoU6fPq0jR46Uaatx48Y6efKkDh8+rNzcXBUWFmrLli0uW+LRx8dHbdu21fHjx53ar/SxBjc3tzLlM2bM0IcffqhVq1YpJydH+/bt06RJkxQUFKQJEyY43c8TTzyhNWvWKCkpSTk5OSouLtbx48f1448/SpKio6PVokUL7dy506m2K3Pq1Cm98847mj59eoV14uLi1Lp1a8XExOjo0aM6e/asZs6cqfz8/HInniwd4/ISDAAA1yKJAAAAJElvvPGGevbsKUmaOXOmhg8frqSkJCUmJkqSunbtqkOHDmnFihWaMWOGJOmhhx7SgQMHbG1cvnxZ4eHh8vb2Vt++fdW+fXt9+umndvMITJ48WQMGDNDYsWPVoUMHzZ8/33bbeu/evW3LQU6aNEnNmzdXp06dNHjwYJ07d65WxqEyQ4YMUUZGht38Bh999JHCwsKUmZmpnj17asqUKWX269Wrl+Li4sqUv/LKK4qPj9e8efPUtGlT9evXT7fddpvS09PVsGFDSXLqHCxdulTTp09XQkKCmjRpoqCgIMXGxur8+fOSrj4mkJWVpbS0tEqPc/v27erTp49uueUW7dixQ3v27FFQUJDuuecebdu2za7u4sWLNWzYMIWEhFTYXmBgoP71r38pODhY3bp1U6tWrfT5559r06ZN6tatW5n6X3zxhVq1aqWuXbtWGicAoPZZTHmL8wIAqsxisSglJUVjxoxxdSioR9auXauoqCi58s/6xIkTlZqaqrNnz7osBmc5+349ePCgOnbsqOTkZI0bN66Go6t+JSUl6t+/v2JiYvTkk0+6OpxynT17VsHBwVqwYIEtUeIofv8CQM3jTgQAAFBtnJl08EYUFhamefPmad68ebp48aKrw3FKcXGxNmzYoNzcXEVHR7s6nArNmTNH3bp109SpU10dCgCgHCQRAKCOefrpp+Xn5yeLxeKSCdLqivXr16tt27Z2S9VZLBZ5enqqefPm6t+/v1577TXbbdpAbZk1a5ZGjx6t6OhopydZdKX09HStX79eW7ZskY+Pj6vDKdeSJUu0e/dubd68WR4eHq4OBwBQDpIIAFDHvP3221qxYoWrw3C5yMhIHTp0SKGhofL395cxRiUlJcrKytLatWvVpk0bzZw5U507dy4zuz1q3+zZs5WcnKwLFy6oTZs2WrdunatDqlELFy7U1KlT9eqrr7o6FIcNHDhQq1evVsuWLV0dSrnS0tJ05coVpaenKzAw0NXhAAAqQBIBAFCj8vPzFRERUS1tWSwWBQQEqH///kpOTtbatWt16tQpDRky5Ib6Rrgi1TlWtS0+Pl5XrlyRMUY//PCDRo0a5eqQatygQYO0aNEiV4dx0xg+fLhmzZpVZhULAEDdQhIBAOogi8Xi6hCqzcqVK5WVlVUjbY8aNUoxMTHKysrSm2++WSN91KaaHCsAAIDqQBIBAFzMGKPXXntNHTp0kJeXl/z9/fW73/3Ors7ixYvl4+MjPz8/ZWVlacaMGWrVqpX2798vY4yWLFmijh07ysvLS4GBgRoxYoS+++472/7Lli2T1WpV8+bNNXHiRAUFBclqtSoiIkI7duwoE8+12ps6dao8PT3tbot+5pln1LBhQ1ksFp05c0aSFBsbqxkzZigzM1MWi0VhYWGSpI8//liNGjXSwoULr3v8YmJiJElbtmy5KccKAACgTjEAgGolyaSkpDhc/4UXXjAWi8X88Y9/NOfPnzd5eXlm+fLlRpLZtWuXXT1JZtq0aeb11183jzzyiPn222/Nyy+/bDw9Pc17771nsrOzzd69e0337t1N06ZNzU8//WTbf8KECaZhw4bmm2++MZcvXzYZGRmmZ8+exs/Pzxw9etRWz9H2HnvsMdOiRQu7Y3nttdeMJHP69GlbWWRkpAkNDbWr97e//c34+fmZefPmXXN8QkNDjb+/f4Xbc3JyjCRz66233pRj5aiUlBTDn3XnOft+Rd3G+QSAmsedCADgQvn5+UpMTNT999+vuLg4BQQEyNvbW40bN65wn0WLFunZZ5/V+vXr1bp1ay1ZskSPPPKIxo0bJ39/f4WHh+vNN9/UmTNn9NZbb9nt6+7ubvvWvFOnTkpKSlJubq6Sk5Nt8TjTXlUNGTJEOTk5eumll667rdKVLHJzc8tsuxnGCgAAoC5xd3UAAFCfHTx4UHl5eRo4cGCV9s/IyNDFixfVo0cPu/KePXvK09OzzO33v9ajRw/5+PjYbr+/3vZc4dKlSzLGqFGjRpXWqy9jNXr0aJf0eyNLTExUamqqq8MAAOCGwJ0IAOBCx48flyQ1a9asSvtnZ2dLknx9fctsCwgIKPfb+V/z8vLS6dOnq6292vb9999Lkm6//fZK6zFWAAAA1487EQDAhaxWqyTpypUrVdo/ICBAksr9wJqdna3g4OBK9y8sLLSrd73tucLHH38sSXr44YcrrVdfxopv1J1jsVg0ffp0jRkzxtWhoBrcTCvbAEBdxZ0IAOBCXbp0UYMGDfTPf/6zyvv7+vrqyy+/tCvfsWOHCgoKdNddd1W6f3p6uowx6tWrl9Ptubu7q7CwsEpxV5effvpJiYmJCg4O1pNPPllp3fo+VgAAANWBJAIAuFCzZs0UGRmpdevWaeXKlcrJydHevXsdnpTParVqxowZ+vDDD7Vq1Srl5ORo3759mjRpkoKCgjRhwgS7+iUlJTp//ryKioq0d+9excbGKiQkxLZMojPthYWF6dy5c9qwYYMKCwt1+vRpHTlypEyMjRs31smTJ3X48GHl5uaqsLBQW7ZscWqJR2OMLl68qJKSEhljdPr0aaWkpOiee+6Rm5ubNmzYcM05EW7UsQIAAKhTXLo2BADchOTkEmO5ubnm6aefNk2aNDG+vr6mT58+5uWXXzaSTHBwsNmzZ49JSEgw3t7etqUM33vvPdv+JSUl5rXXXjPt2rUzHh4eJjAw0IwcOdLs37/frp8JEyYYDw8P06pVK+Pu7m4aNWpkRowYYTIzM+3qOdre2bNnzYABA4zVajVt2rQxU6ZMMb/73e+MJBMWFmZbCnHnzp2mdevWxtvb2/Tp08f89NNPZvPmzcbPz88sWLCgwnHZuHGj6dq1q/Hx8TGenp6mQYMGRpKxWCwmICDA/OY3vzHz5s0zZ8+etdvvZhsrR7HEY9U4+35F3cb5BICaZzHGGFclMADgZmSxWJSSklLnnrGeOHGiUlNTdfbsWVeHUufdiGO1du1aRUVFiT/rzqmr71dUDecTAGoejzMAQD1SXFzs6hBuGIwVAABAWSQRAAAAqmDr1q2aNWuW1q9fr7Zt28pischisejxxx8vU3fQoEHy8/OTm5ubOnfurJ07d7ogYueVlJQoMTFRERER5W7v37+/7bh//fr18qeFhYWKj49XWFiYPD09FRAQoC5duujw4cOSpI0bNyohIYEEHgDUcSQRAKAemD17tpKTk3XhwgW1adNG69atc3VIdRZjBUe88sorWrZsmWbPnq3IyEgdOnRIoaGhatKkiVatWqVNmzbZ1f/kk0+UmpqqoUOHKiMjQ927d3dR5I47cOCA7r33XsXFxSkvL8/p/fv06WP3c1RUlN59912tXr1aeXl5+vbbbxUaGqqLFy9KkoYNGyar1aqBAwcqOzu7Wo4BAFD9SCIAQD0QHx+vK1euyBijH374QaNGjXJ1SHUWY1V1+fn5FX5jfSP1cS2LFi3SBx98oLVr18rPz89u27Jly9SgQQNNmDBBFy5ccFGE12/Pnj16/vnnNWnSJHXr1q3CelarVTk5OTLG2L0mTJig3//+97Z6H3zwgTZs2KDU1FTdfffdcnd3V1BQkNLS0tSlSxdbvWnTpumOO+7Q4MGDVVRUVKPHCACoGpIIAACgWqxcuVJZWVk3fB+VOXjwoF566SXNnTtXVqu1zPaIiAjFxsbqxIkTeu6551wQYfW44447tH79ej322GPy8vKqsN7HH39cJpFy7Ngxff3117rvvvtsZX/605/UvXt3hYeHX7PvOXPmaPfu3Vq6dGnVDwAAUGNIIgAAUE8ZY7RkyRJ17NhRXl5eCgwM1IgRI/Tdd9/Z6kydOlWenp5q2bKlreyZZ55Rw4YNZbFYdObMGUlSbGysZsyYoczMTFksFoWFhWnZsmWyWq1q3ry5Jk6cqKCgIFmtVkVERGjHjh3V0od09YNso0aNtHDhwhodL+nqnQbGGA0bNqzCOgsWLFD79u319ttva+vWrZW258g5SEpKUsOGDeXj46O0tDQ9/PDDatSokYKDg7VmzRq79oqLi/Xyyy8rJCRE3t7e6tq1q1JSUq7voJ20aNEiTZs2zfZzQUGBtm/fXukdDb8UGBiofv36aenSpaw2AgB1EEkEAADqqTlz5mjWrFl64YUXlJWVpW3btunYsWPq27evTp06Jenqh+ZfL5e3fPlyzZ07165s6dKlGjp0qEJDQ2WM0cGDBzV16lTFxMQoLy9P06ZN0+HDh7Vz504VFRXpgQce0LFjx667D+nnlTRKSkqqb3AqsGnTJnXo0EE+Pj4V1vH29tZf/vIXNWjQQOPHj9elS5cqrOvIOZg8ebKmT5+u/Px8+fn5KSUlRZmZmWrbtq3Gjx+vwsJCW3vPP/+8Fi9erMTERP34448aOnSoHn30UX355ZfVNwiVOHHihNLT0xUZGWkrO3nypAoKCvTVV19pwIABtmRSx44dtXz58nITBXfeeadOnDihPXv21ErcAADHkUQAAKAeys/P15IlS/TII49o3Lhx8vf3V3h4uN58802dOXNGb731VrX15e7ubvumvVOnTkpKSlJubq6Sk5Orpf0hQ4YoJydHL730UrW0V5FLly7phx9+UGho6DXrQAMb8AAAIABJREFU9u7dW9OnT9fhw4f1/PPPl1unKucgIiJCjRo1UrNmzRQdHa1Lly7p6NGjkqTLly8rKSlJI0eOVGRkpAICAvTiiy/Kw8Oj2sb6WhYtWqQpU6aoQYOf/8UsnTixWbNmWrhwoTIyMnTq1CmNGDFCzz77rN5///0y7bRr106StG/fvlqJGwDgOJIIAADUQxkZGbp48aJ69OhhV96zZ095enraPW5Q3Xr06CEfHx+7W/ZvBFlZWTLGVHoXwi8tWLBAHTp00PLly/XZZ5+V2X6958DT01OSbHci7N+/X3l5eXYTFXp7e6tly5a1MtYnT57Uxo0bFRMTY1deOqdC586dFRERocaNG8vf319z586Vv79/ucmS0jEuvRsDAFB3kEQAAKAeKl1Cz9fXt8y2gIAA5ebm1mj/Xl5eOn36dI32Ud0uX74sSZVONPhLVqtVycnJslgsevLJJ5Wfn2+3vbrPQeljEy+++KIsFovtdeTIkSot0eishIQEjR8/vsyEk0FBQZJkm9uilKenp1q3bq3MzMwybXl7e0v6ecwBAHUHSQQAAOqhgIAASSr3g2p2draCg4NrrO/CwsIa76MmlH6wLZ2DwRG9e/dWXFycDhw4oPnz59ttq+5z0KxZM0lSYmJimSUX//vf/zrVlrN++uknvf/++5o8eXKZbb6+vmrXrp2++eabMtuKiork7+9fprygoEDSz2MOAKg7SCIAAFAPdenSRb6+vmUm3NuxY4cKCgp011132crc3d3tJu+7Xunp6TLGqFevXjXWR01o3ry5LBaLLly44NR+8+fP1+23365du3bZlTtzDhxx6623ymq1avfu3U7tVx0SEhI0btw4NW7cuNztUVFR2rVrlw4dOmQry8vL05EjR8pd9rF0jFu0aFEzAQMAqowkAgAA9ZDVatWMGTP04YcfatWqVcrJydG+ffs0adIkBQUFacKECba6YWFhOnfunDZs2KDCwkKdPn1aR44cKdNm48aNdfLkSR0+fFi5ubm2pEBJSYnOnz+voqIi7d27V7GxsQoJCbF7dv56+tiyZUutLPHo4+Ojtm3b6vjx407tV/pYg5ubW5lyR8+Bo/088cQTWrNmjZKSkpSTk6Pi4mIdP35cP/74oyQpOjpaLVq00M6dO51quzKnTp3SO++8o+nTp1dYJy4uTq1bt1ZMTIyOHj2qs2fPaubMmcrPzy934snSMS4vwQAAcC2SCAAA1FOvvPKK4uPjNW/ePDVt2lT9+vXTbbfdpvT0dDVs2NBWb/LkyRowYIDGjh2rDh06aP78+bbbzHv37m1bqnHSpElq3ry5OnXqpMGDB+vcuXOSrj7XHh4eLm9vb/Xt21ft27fXp59+aje3wPX2UVuGDBmijIwMu/kNPvroI4WFhSkzM1M9e/bUlClTyuzXq1cvxcXFlSl35BwkJSUpMTFRktS1a1cdOnRIK1as0IwZMyRJDz30kA4cOCDp6jKY06dPV0JCgpo0aaKgoCDFxsbq/Pnzkq4+JpCVlaW0tLRKj3P79u3q06ePbrnlFu3YsUN79uxRUFCQ7rnnHm3bts2u7uLFizVs2DCFhIRU2F5gYKD+9a9/KTg4WN26dVOrVq30+eefa9OmTerWrVuZ+l988YVatWqlrl27VhonAKD2WUx5i/MCAKrMYrEoJSWlzLr3QE1au3atoqKiVNf+rE+cOFGpqak6e/asq0Mpl7Pv14MHD6pjx45KTk7WuHHjaji66ldSUqL+/fsrJiZGTz75pKvDKdfZs2cVHBysBQsW2BIljuL3LwDUPO5EAAAANcqZiQjrurCwMM2bN0/z5s3TxYsXXR2OU4qLi7Vhwwbl5uYqOjra1eFUaM6cOerWrZumTp3q6lAAAOUgiQAAAOCEWbNmafTo0YqOjnZ6kkVXSk9P1/r167Vlyxb5+Pi4OpxyLVmyRLt379bmzZvl4eHh6nAAAOUgiQAAAGrE7NmzlZycrAsXLqhNmzZat26dq0OqNgsXLtTUqVP16quvujoUhw0cOFCrV69Wy5YtXR1KudLS0nTlyhWlp6crMDDQ1eEAACrg7uoAAADAzSk+Pl7x8fGuDqPGDBo0SIMGDXJ1GDeN4cOHa/jw4a4OAwBwDdyJAAAAAAAAHEISAQAAAAAAOIQkAgAAAAAAcAhJBAAAAAAA4BCSCAAAAAAAwCEWY4xxdRAAcDOxWCyuDgEA6q2UlBSNGTPG1WEAwE2LJR4BoJqlpKS4OgSgyqKiohQbG6vevXu7OhSgSiIiIlwdAgDc1LgTAQAA2FgsFr7JBQAAFWJOBAAAAAAA4BCSCAAAAAAAwCEkEQAAAAAAgENIIgAAAAAAAIeQRAAAAAAAAA4hiQAAAAAAABxCEgEAAAAAADiEJAIAAAAAAHAISQQAAAAAAOAQkggAAAAAAMAhJBEAAAAAAIBDSCIAAAAAAACHkEQAAAAAAAAOIYkAAAAAAAAcQhIBAAAAAAA4hCQCAAAAAABwCEkEAAAAAADgEJIIAAAAAADAISQRAAAAAACAQ0giAAAAAAAAh5BEAAAAAAAADiGJAAAAAAAAHEISAQAAAAAAOIQkAgAAAAAAcAhJBAAAAAAA4BCSCAAAAAAAwCEkEQAAAAAAgENIIgAAAAAAAIeQRAAAAAAAAA4hiQAAAAAAABxCEgEAAAAAADiEJAIAAAAAAHCIu6sDAAAArrFmzRrl5uaWKd+6dauys7PtykaOHKlmzZrVVmgAAKCOshhjjKuDAAAAtS8mJkb/+7//Kw8PD1tZ6b8FFotFklRcXCxfX19lZWXJy8vLJXECAIC6g8cZAACop8aOHStJKiwstL2KiopUVFRk+9nNzU2jR48mgQAAACRxJwIAAPVWUVGRWrRooXPnzlVa7x//+Ifuu+++WooKAADUZdyJAABAPeXu7q6xY8faPc7wa02bNlW/fv1qMSoAAFCXkUQAAKAeGzt2rAoLC8vd5uHhoccff1xubm61HBUAAKireJwBAIB6zBijkJAQHT9+vNztn3/+uXr27FnLUQEAgLqKOxEAAKjHLBaLxo0bV+4jDbfeeqt69OjhgqgAAEBdRRIBAIB6rrxHGjw8PBQTE2Nb6hEAAEDicQYAACDp9ttv1/79++3Kvv76a3Xu3NlFEQEAgLqIOxEAAIAef/xxu0caOnXqRAIBAACUQRIBAABo3LhxKioqknT1UYb/+Z//cXFEAACgLuJxBgAAIEnq0aOHvvrqK1ksFh0+fFghISGuDgkAANQx3IkAAAAkSb/97W8lSXfffTcJBAAAUC53VwcAAPXN6NGjXR0CUK7Lly/LYrHoypUrXKeos+Li4tS7d29XhwEA9RZ3IgBALVu3bp2OHz/u6jBwgzl+/LjWrVtXo31YrVa1aNFCwcHBNdpPbeL9dnNZt26djh075uowAKBe404EAHCB6dOna8yYMa4OAzeQtWvXKioqSqmpqTXaz8GDBxUWFlajfdQmi8XC++0mYrFYXB0CANR73IkAAABsbqYEAgAAqH4kEQAAAAAAgENIIgAAAAAAAIeQRAAAAAAAAA4hiQAAAAAAABxCEgEAgHpk8+bN8vf311//+ldXh1Lnbd26VbNmzdL69evVtm1bWSwWWSwWPf7442XqDho0SH5+fnJzc1Pnzp21c+dOF0TsvJKSEiUmJioiIqLc7f3797cd969fvr6+dnULCwsVHx+vsLAweXp6KiAgQF26dNHhw4clSRs3blRCQoKKi4tr+rAAADWIJAIAAPWIMcbVIdwQXnnlFS1btkyzZ89WZGSkDh06pNDQUDVp0kSrVq3Spk2b7Op/8sknSk1N1dChQ5WRkaHu3bu7KHLHHThwQPfee6/i4uKUl5fn9P59+vSx+zkqKkrvvvuuVq9erby8PH377bcKDQ3VxYsXJUnDhg2T1WrVwIEDlZ2dXS3HAAD4/+zdeVCUV7o/8O/L2t1AsygIiiiLogiIiUwJatR4Y6JeXOICiWYumjCISZAlCeAWRCQuU0CRyHVEL7k1JtooBjJxmSnHEG7qGm7yQ9Bg6bAIAi64QrOoLO/vD4ue9DRgtywN+v1U9R8571mePm9a7afPe87AM9J3AERERDRwFi5ciPr6en2HAQBoaWnB3Llz8b//+7/6DkXNzp07ceTIERQXF0MikahdS0tLwzvvvIPQ0FCUlJTA0tJST1H2TnFxMRISEhAWFoampqZuk0sSiQQNDQ2wsLBQK1+3bh1Wrlyp+u8jR44gJycHxcXF8PLyAgA4ODggNzdXrd2GDRtQUVGBBQsWID8/H0ZG/KcoEdFQw5UIREREpBcHDx5EXV2dvsNQU1ZWhi1btmDbtm0aCQQA8Pf3R0REBGpra/HRRx/pIcK+MXnyZGRnZ2PVqlUwNTXttt7p06c1EgjV1dX49ddf8eqrr6rK/vM//xMvvfSSKoHQk/j4eBQVFSE1NfXZ3wAREekNkwhEREQviB9//BFOTk4QBAFffPEFACA9PR1mZmaQyWTIzc3F/PnzIZfL4ejoiMOHD6vapqWlQSKRwM7ODuvWrYODgwMkEgn8/f1RUFCgqhceHg4TExPY29uryt5//32YmZlBEATcuXMHABAREYHo6GiUl5dDEAS4ubkBePKlVS6XY8eOHQMxJRrS0tIgiiIWLVrUbZ3ExESMHz8eBw4cwJkzZ3rsTxRFJCcnY+LEiTA1NYW1tTWWLFmCy5cvq+poew8AoL29HVu3boWTkxOkUim8vb2hUCh696Z1tHPnTmzYsEH1348fP8ZPP/0EHx8frdpbW1tj1qxZSE1N5eM1RERDEJMIREREL4gZM2ZoPDqwfv16REZGoqWlBRYWFlAoFCgvL4eLiwtCQkLQ2toK4ElyIDg4GM3NzdiwYQMqKytRWFiItrY2vPbaa6iurgbw5Ev4b5e5A8DevXuxbds2tbLU1FQEBATA1dUVoiiirKwMAFSb7nV0dPTLHDzNiRMn4O7uDplM1m0dqVSKL7/8EgYGBggJCUFTU1O3dePj4xEXF4dNmzahrq4O+fn5qK6uxsyZM3Hr1i0A2t8DAIiNjcXu3buRkpKCGzduICAgAG+//TZ++eWXvpuEHtTW1iIvLw/Lli1TlV2/fh2PHz/G//t//w9z5sxRJZgmTpyIvXv3dpkomDJlCmpra1FcXDwgcRMRUd9hEoGIiIgAPFmqL5fLYWtri6CgIDQ1NeHatWtqdYyMjFS/qnt4eCA9PR1KpRKZmZl9EsPChQvR0NCALVu29El/umhqasLVq1fh6ur61Lp+fn6IjIxEZWUlYmNju6zT0tKC5ORkvPnmm1i9ejUsLS3h5eWFffv24c6dO9i/f79Gm57uwcOHD5Geno6lS5di2bJlsLKywubNm2FsbNxn8/80O3fuxIcffggDg3/+E7Jz40RbW1vs2LEDJSUluHXrFpYsWYIPPvgAX3/9tUY/48aNAwBcvHhxQOImIqK+wyQCERERaTAxMQEAtV/BuzJ16lTIZDK15flDVV1dHURR7HEVwm8lJibC3d0de/fuxY8//qhxvaSkBI2NjZg6dapaua+vL0xMTNQeA+nKv96DK1euoLm5GZ6enqo6UqkU9vb2AzL/169fx7fffovg4GC18s49FSZNmgR/f3/Y2NjA0tIS27Ztg6WlZZfJks457lyNQUREQweTCERERNQrpqamuH37tr7D6LWHDx8CQI8bDf6WRCJBZmYmBEHA2rVr0dLSona98xhDc3NzjbZWVlZQKpU6xdf52MTmzZshCILqVVVV9UxHNOpq165dCAkJ0dhw0sHBAQBU+110MjExwZgxY1BeXq7Rl1QqBfDPOScioqGDSQQiIiJ6Zq2trXjw4AEcHR31HUqvdX6x7dyXQRt+fn6IiopCaWkptm/frnbNysoKALpMFjzLnNna2gIAUlJSIIqi2uvcuXM69aWrmzdv4uuvv8b69es1rpmbm2PcuHG4dOmSxrW2trYuj8F8/PgxgH/OORERDR1MIhAREdEzy8vLgyiKmDZtmqrMyMjoqY9BDEZ2dnYQBAH19fU6tdu+fTsmTJiA8+fPq5V7enrC3NxcY9PDgoICPH78GC+//LJO44wePRoSiQRFRUU6tesLu3btwurVq2FjY9Pl9cDAQJw/fx4VFRWqsubmZlRVVXV57GPnHI8YMaJ/AiYion7DJAIRERFpraOjA/fv30dbWxsuXLiAiIgIODk5qT0n7+bmhnv37iEnJwetra24ffs2qqqqNPqysbHB9evXUVlZCaVSidbWVpw6dUpvRzzKZDK4uLigpqZGp3adjzUYGhpqlEdHR+P48eM4dOgQGhoacPHiRYSFhcHBwQGhoaE6j7NmzRocPnwY6enpaGhoQHt7O2pqanDjxg0AQFBQEEaMGIHCwkKd+u7JrVu38F//9V+IjIzstk5UVBTGjBmD4OBgXLt2DXfv3kVMTAxaWlq63Hiyc467SjAQEdHgxiQCERHRC+KLL76Ar68vACAmJgaLFy9Geno6UlJSAADe3t6oqKhARkYGoqOjAQBvvPEGSktLVX08fPgQXl5ekEqlmDlzJsaPH4/vv/9ebR+B9evXY86cOXjrrbfg7u6O7du3q5at+/n5qY6DDAsLg52dHTw8PLBgwQLcu3dvQOahJwsXLkRJSYna/gbffPMN3NzcUF5eDl9fX3z44Yca7aZNm4aoqCiN8k8//RRJSUlISEjA8OHDMWvWLIwdOxZ5eXkwMzMDAJ3uQWpqKiIjI7Fr1y4MGzYMDg4OiIiIwP379wE8eUygrq4Oubm5Pb7Pn376CTNmzMDIkSNRUFCA4uJiODg4YPr06cjPz1eru3v3bixatAhOTk7d9mdtbY3/+Z//gaOjI3x8fDBq1Cj83//9H06cOAEfHx+N+j///DNGjRoFb2/vHuMkIqLBRxC7OryXiIj6jSAIUCgUWLlypb5DoSEkKysLgYGB0Odf2+vWrcPRo0dx9+5dvcWgK10/b2VlZZg4cSIyMzOxevXqfo6u73V0dGD27NkIDg7G2rVr9R1Ol+7evQtHR0ckJiaqEiXa4p+fRET6x5UIREREpDVdNh0citzc3JCQkICEhAQ0NjbqOxydtLe3IycnB0qlEkFBQfoOp1vx8fHw8fFBeHi4vkMhIqJnwCQCERER0W/ExcVhxYoVCAoK0nmTRX3Ky8tDdnY2Tp06BZlMpu9wupScnIyioiKcPHkSxsbG+g6HiIieAZMIRERDzHvvvQcLCwsIgqCXXdr7QmJioto5950vT09PnfvKzs6Gi4uLRl8mJiaws7PD7NmzsWfPHtUz4/RsNm7ciMzMTNTX18PZ2RnHjh3Td0j9aseOHQgPD8dnn32m71C0NnfuXHz11Vewt7fXdyhdys3NxaNHj5CXlwdra2t9h0NERM+ISQQioiHmwIEDyMjI0HcYg8ayZctQUVEBV1dXWFpaQhRFdHR0oK6uDllZWXB2dkZMTAwmTZqkcdQeaS8pKQmPHj2CKIq4evUqli9fru+Q+t28efOwc+dOfYfx3Fi8eDHi4uI0TrEgIqKhhUkEIiLSiz//+c8QRVHt9euvv/ZJ34IgwMrKCrNnz0ZmZiaysrJw69YtLFy4cEgtTyciIiIabJhEICIaggRB0HcIQ8ry5csRHByMuro67Nu3T9/hEBEREQ1ZTCIQEQ1yoihiz549cHd3h6mpKSwtLfHxxx9r1Gtvb8fWrVvh5OQEqVQKb29vKBQKAE/OoTczM4NMJkNubi7mz58PuVwOR0dHHD58WK2fH374Ab/73e8gk8kgl8vh5eWFhoaGp47RH06fPg25XI4dO3b0uq/g4GAAwKlTp1Rlz+OcEREREfUnJhGIiAa5LVu2ICYmBqGhobh16xZu3ryJ2NhYjXqxsbHYvXs3UlJScOPGDQQEBODtt9/GL7/8gvXr1yMyMhItLS2wsLCAQqFAeXk5XFxcEBISgtbWVgBAU1MTFi1ahOXLl+PevXsoLS3F+PHj8fjx46eOoau4uDhYW1vDxMQEzs7OWLJkCX7++We1Op3HCXZ0dOjc/7/y8fEBAFRUVKjKhtqcEREREemdSEREAwqAqFAotKrb3NwsymQy8bXXXlMrP3z4sAhAPH/+vCiKotjS0iLKZDIxKChIra2pqam4fv16URRFcdOmTSIAsaWlRVVn7969IgCxrKxMFEVR/PXXX0UA4nfffacRizZjaOvatWtiYWGhqFQqxUePHonnzp0Tp0yZIkqlUvHXX3/Vqa9Orq6uoqWlZY91BEEQraysRFEcenOmUChE/rWtO10+bzT48X4SEekfVyIQEQ1iZWVlaG5uxty5c3usd+XKFTQ3N6sdkSiVSmFvb4/Lly93287ExAQAVL+qu7i4wM7ODqtXr0Z8fDwqKyt7PUZXRo8ejSlTpsDc3BwmJiaYNm0aMjMz0dLSgr179+rUl7aampogiiLkcjmAoTdnnbo6GpOv7l8AEBgYqPc4+Oq7+0lERPplpO8AiIioezU1NQAAW1vbHus1NTUBADZv3ozNmzerXXNwcNB6PKlUirNnzyI2NhY7duxAQkICVq5ciczMzD4bozteXl4wNDTEP/7xj1731ZXOfidMmABg6M4Z91PQTWBgICIiIuDn56fvUKgPBAYG6jsEIqIXHpMIRESDmEQiAQA8evSox3qdSYaUlBRERET0asxJkybhL3/5C27fvo3k5GTs3LkTkyZNQlBQUJ+N0ZWOjg50dHTA1NS0z/sGnmzSCADz588HMHTnbOXKlX3Sz4siMDAQfn5+nLfnBJMIRET6x8cZiIgGMU9PTxgYGOCHH37osd7o0aMhkUhQVFTUq/GuX7+OS5cuAXjyJfuzzz7DSy+9hEuXLvXZGADw+uuva5T9/PPPEEWxX34xvnnzJlJSUuDo6Ii1a9cCGHpzRkRERDQYMIlARDSI2draYtmyZTh27BgOHjyIhoYGXLhwAfv371erJ5FIsGbNGhw+fBjp6eloaGhAe3s7ampqcOPGDa3Hu379OtatW4fLly/j8ePHOH/+PKqqqjBt2rQ+GwMAamtrceTIETx48ACtra04d+4c3nvvPTg5OSEsLExV79SpUzod8SiKIhobG9HR0QFRFHH79m0oFApMnz4dhoaGyMnJUe2JMNTmjIiIiGhQ0O++jkRELx7ouLu4UqkU33vvPXHYsGGiubm5OGPGDHHr1q0iANHR0VEsLi4WRVEUHz16JMbExIhOTk6ikZGRaGtrKy5btkwsKSkR9+7dK8pkMhGAOG7cOLG8vFzcv3+/KJfLRQDimDFjxH/84x9iZWWl6O/vL1pbW4uGhobiyJEjxU2bNoltbW1PHUMX0dHRoqurq2hmZiYaGRmJjo6OYkhIiHj9+nW1eidPnhQtLCzExMTEbvv69ttvRW9vb1Emk4kmJiaigYGBCEB1EsPvfvc7MSEhQbx7965G26E0Zzyd4dno+nmjwY33k4hI/wRRFEV9JTCIiF5EgiBAoVDwGW3SSVZWFgIDA8G/tnXDz9vzhfeTiEj/+DgDEREREREREWmFSQQiIuq1y5cva3XGe+dpBURDwZkzZxAXF4fs7Gy4uLio/j9+5513NOrOmzcPFhYWMDQ0xKRJk1BYWKiHiHXX0dGBlJQU+Pv7d3k9ISEBHh4ekMvlMDU1hZubGz755BM0NjZq1P3666/h6+sLCwsLjBkzBmvWrMHNmzdV17/99lvs2rUL7e3t/fZ+iIio/zGJQEREvTZhwgSIovjU15EjR/QdKpFWPv30U6SlpWHjxo1YtmwZKioq4OrqimHDhuHQoUM4ceKEWv2//e1vOHr0KAICAlBSUoKXXnpJT5Frr7S0FK+88gqioqLQ3NzcZZ2zZ8/igw8+QGVlJe7cuYOkpCSkpqZixYoVavUUCgVWrVqFFStWoKamBrm5ucjPz8f8+fPR1tYGAFi0aBEkEgnmzp2LBw8e9Pv7IyKi/sEkAhEREWmlpaWl21+sh9IYT7Nz504cOXIEWVlZsLCwULuWlpYGAwMDhIaGor6+Xk8R9l5xcTFiY2MRFhYGHx+fbuuZm5sjNDQUNjY2sLCwwMqVK7F06VKcPn0a1dXVqnp/+tOfMHLkSHz88cewtLSEj48PoqKiUFRUhIKCAlW9DRs2YPLkyViwYIEquUBEREMLkwhERESklYMHD6Kurm7Ij9GTsrIybNmyBdu2bYNEItG47u/vj4iICNTW1uKjjz7SQ4R9Y/LkycjOzsaqVatgamrabb3vvvsOhoaGamXDhw8HALXVC9XV1XBwcIAgCKqy0aNHAwCqqqrU2sfHx6OoqAipqam9fh9ERDTwmEQgIiJ6TomiiOTkZEycOBGmpqawtrbGkiVLcPnyZVWd8PBwmJiYwN7eXlX2/vvvw8zMDIIg4M6dOwCAiIgIREdHo7y8HIIgwM3NDWlpaZBIJLCzs8O6devg4OAAiUQCf39/tV+fezMGAJw+fRpyuRw7duzo1/kCnqw0EEURixYt6rZOYmIixo8fjwMHDuDMmTM99qfNPUhPT4eZmRlkMhlyc3Mxf/58yOVyODo64vDhw2r9tbe3Y+vWrXBycoJUKoW3tzcUCkXv3rSOamtrIZVK4ezsrCpzcXHRSP507ofg4uKiVm5tbY1Zs2YhNTWVp40QEQ1BTCIQERE9p+Lj4xEXF4dNmzahrq4O+fn5qK6uxsyZM3Hr1i0AT740/+txeXv37sW2bdvUylJTUxEQEABXV1eIooiysjKEh4cjODgYzc3N2LBhAyorK1FYWIi2tja89tprquXuvRkDgGojvo6Ojr6bnG6cOHEC7u7ukMlk3daRSqX48ssvYWBggJCQEDQ1NXVbV5t7sH79ekRGRqKlpQUWFhZQKBQoLy+Hi4sLQkJC0NraquovNjYWu3fvRkpKCm7cuIGAgAC8/fbb+OWXX/puEnrQ3NyMs2fPIiQkBCYmJqryjRs34ubNm/iOp0WFAAAgAElEQVT888+hVCpRUlKC1NRUvP7665g2bZpGP1OmTEFtbS2Ki4sHJG4iIuo7TCIQERE9h1paWpCcnIw333wTq1evhqWlJby8vLBv3z7cuXMH+/fv77OxjIyMVL+0e3h4ID09HUqlEpmZmX3S/8KFC9HQ0IAtW7b0SX/daWpqwtWrV+Hq6vrUun5+foiMjERlZSViY2O7rPMs98Df3x9yuRy2trYICgpCU1MTrl27BgB4+PAh0tPTsXTpUixbtgxWVlbYvHkzjI2N+2yunyYpKQkODg5ITExUK581axZiYmIQHh4OuVwOT09PKJVKHDhwoMt+xo0bBwC4ePFiv8dMRER9i0kEIiKi51BJSQkaGxsxdepUtXJfX1+YmJioPW7Q16ZOnQqZTKa2ZH8oqKurgyiKPa5C+K3ExES4u7tj7969+PHHHzWu9/YedP7S37kS4cqVK2huboanp6eqjlQqhb29/YDM9fHjx5GVlYW//vWvGhtObtq0Cfv378ff//53NDY2oqKiAv7+/vDz81PbgLFT5xx3rsYgIqKhg0kEIiKi51DnEXrm5uYa16ysrKBUKvt1fFNTU9y+fbtfx+hrDx8+BIAeNxr8LYlEgszMTAiCgLVr16KlpUXtel/fg87HJjZv3gxBEFSvqqqqbo9o7CtHjhzBzp07kZeXh7Fjx6pdu3HjBnbt2oU//OEPePXVV2FmZgZnZ2dkZGTg+vXr2LNnj0Z/UqkUwD/nnIiIhg4mEYiIiJ5DVlZWANDlF9UHDx7A0dGx38ZubW3t9zH6Q+cX2849GLTh5+eHqKgolJaWYvv27WrX+voe2NraAgBSUlIgiqLa69y5czr1pYvPP/8chw4dwtmzZzFy5EiN66WlpWhvb9e4JpfLYWNjg5KSEo02jx8/BvDPOScioqGDSQQiIqLnkKenJ8zNzTU23CsoKMDjx4/x8ssvq8qMjIzUNu/rrby8PIiiqLahXl+P0R/s7OwgCALq6+t1ard9+3ZMmDAB58+fVyvX5R5oY/To0ZBIJCgqKtKp3bMSRRExMTG4ePEicnJyulxRAUCVDLlx44ZauVKpxL1791RHPf5W5xyPGDGij6MmIqL+xiQCERHRc0gikSA6OhrHjx/HoUOH0NDQgIsXLyIsLAwODg4IDQ1V1XVzc8O9e/eQk5OD1tZW3L59G1VVVRp92tjY4Pr166isrIRSqVQlBTo6OnD//n20tbXhwoULiIiIgJOTE4KDg/tkjFOnTg3IEY8ymQwuLi6oqanRqV3nYw2GhoYa5dreA23HWbNmDQ4fPoz09HQ0NDSgvb0dNTU1qi/wQUFBGDFiBAoLC3XquyuXLl3C7t27kZGRAWNjY7VHKARBwB//+EcAgLOzM+bMmYOMjAzk5+ejpaUF1dXVqvf37rvvavTdOcdeXl69jpOIiAYWkwhERETPqU8//RRJSUlISEjA8OHDMWvWLIwdOxZ5eXkwMzNT1Vu/fj3mzJmDt956C+7u7ti+fbtqmflvN8YLCwuDnZ0dPDw8sGDBAty7dw/Ak+favby8IJVKMXPmTIwfPx7ff/+92t4CvR1joCxcuBAlJSVq+xt88803cHNzQ3l5OXx9ffHhhx9qtJs2bRqioqI0yrW5B+np6UhJSQEAeHt7o6KiAhkZGYiOjgYAvPHGGygtLQXw5BjMyMhI7Nq1C8OGDYODgwMiIiJw//59AE8eE6irq0Nubm6P7/Onn37CjBkzMHLkSBQUFKC4uBgODg6YPn068vPzATxZiaANQRBw9OhRBAUF4d1334W1tTU8PDxw7do1ZGdnY+bMmRptfv75Z4waNQre3t5ajUFERIOHIGr7NwQREfUJQRCgUCiwcuVKfYdCQ0hWVhYCAwO1/mI3UNatW4ejR4/i7t27+g6lS7p+3srKyjBx4kRkZmZi9erV/Rxd3+vo6MDs2bMRHByMtWvX6jucLt29exeOjo5ITExUJUq0xT8/iYj0jysRiIiIqFd02YhwsHNzc0NCQgISEhLQ2Nio73B00t7ejpycHCiVSgQFBek7nG7Fx8fDx8cH4eHh+g6FiIieAZMIRERERL8RFxeHFStWICgoSOdNFvUpLy8P2dnZOHXqFGQymb7D6VJycjKKiopw8uRJGBsb6zscIiJ6BkwiEBER0TPZuHEjMjMzUV9fD2dnZxw7dkzfIfWZHTt2IDw8HJ999pm+Q9Ha3Llz8dVXX8He3l7foXQpNzcXjx49Ql5eHqytrfUdDhERPSMjfQdAREREQ1NSUhKSkpL0HUa/mTdvHubNm6fvMJ4bixcvxuLFi/UdBhER9RJXIhARERERERGRVphEICIiIiIiIiKtMIlARERERERERFphEoGIiIiIiIiItMKNFYmI9ODcuXP6DoGGmM7/Z7KysvQcydDDzxsREVHfEURRFPUdBBHRi0QQBH2HQEQ0ZCkUCqxcuVLfYRARvbC4EoGIaIAxd0uDmSAI/JJGRERE3eKeCERERERERESkFSYRiIiIiIiIiEgrTCIQERERERERkVaYRCAiIiIiIiIirTCJQERERERERERaYRKBiIiIiIiIiLTCJAIRERERERERaYVJBCIiIiIiIiLSCpMIRERERERERKQVJhGIiIiIiIiISCtMIhARERERERGRVphEICIiIiIiIiKtMIlARERERERERFphEoGIiIiIiIiItMIkAhERERERERFphUkEIiIiIiIiItIKkwhEREREREREpBUmEYiIiIiIiIhIK0wiEBEREREREZFWmEQgIiIiIiIiIq0wiUBEREREREREWmESgYiIiIiIiIi0wiQCEREREREREWmFSQQiIiIiIiIi0gqTCERERERERESkFSYRiIiIiIiIiEgrTCIQERERERERkVaYRCAiIiIiIiIirTCJQERERERERERaYRKBiIiIiIiIiLTCJAIRERERERERaYVJBCIiIiIiIiLSCpMIRERERERERKQVQRRFUd9BEBER0cALDQ3FlStX1MoKCwvh7OwMa2trVZmhoSH++7//G46OjgMdIhEREQ0yRvoOgIiIiPRjxIgR2L9/v0b5hQsX1P7bxcWFCQQiIiICwMcZiIiIXlhvv/32U+uYmJggODi4/4MhIiKiIYGPMxAREb3APD09cenSJfT0z4ErV65g/PjxAxgVERERDVZciUBERPQC+/3vfw9DQ8MurwmCgMmTJzOBQERERCpMIhAREb3A3nrrLbS3t3d5zdDQEP/xH/8xwBERERHRYMbHGYiIiF5w/v7+KCgoQEdHh1q5IAiorq7GqFGj9BQZERERDTZciUBERPSCe+eddyAIglqZgYEBZsyYwQQCERERqWESgYiI6AW3YsUKjTJBEPD73/9eD9EQERHRYMYkAhER0Qtu+PDhmDt3rtoGi4IgYOnSpXqMioiIiAYjJhGIiIgIq1evVh3zaGhoiNdffx3Dhg3Tc1REREQ02DCJQERERHjzzTdhYmICABBF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P9mJiF5wgiBAoVBonFNPNJRkZWUhMDBQ6y92A2XdunU4evQo7t69q+9QuqTr57+srAwTJ05EZmYmVq9e3c/R9b2Ojg7Mnj0bwcHBWLt2rb7D6dLdu3fh6OiIxMREVaJEW/zznIjo2XElAhEREQ0KumxEONi5ubkhISEBCQkJaGxs1Hc4Omlvb0dOTg6USiWCgoL0HU634uPj4ePjg/DwcH2HQkT0QmESgYiIiKgfxMXFYcWKFQgKCtJ5k0V9ysvLQ3Z2Nk6dOgWZTKbvcLqUnJyMoqIinDx5EsbGxvoOh4johcIkAhEREenVxo0bkZmZifr6ejg7O+PYsWP6DqnP7NixA+Hh4fjss8/0HYrW5s6di6+++gr29vb6DqVLubm5ePToEfLy8mBtba3vcIiIXjhG+g6AiIiIXmxJSUlISkrSdxj9Zt68eZg3b56+w3huLF68GIsXL9Z3GERELyyuRCAiIiIiIiIirTCJQERERERERERaYRKBiIiIiIiIiLTCJAIRERERERERaYUbKxIR6SAlJQVHjx7VdxhEz6ympgYAsGLFCj1HMvTw809ERAQIoiiK+g6CiGgo4JcuehGcOnUKU6ZMGbTH+xH1laioKPj5+ek7DCKiIYdJBCIiIlIRBAEKhQIrV67UdyhEREQ0CHFPBCIiIiIiIiLSCpMIRERERERERKQVJhGIiIiIiIiISCtMIhARERERERGRVphEICIiIiIiIiKtMIlARERERERERFphEoGIiIiIiIiItMIkAhERERERERFphUkEIiIiIiIiItIKkwhEREREREREpBUmEYiIiIiIiIhIK0wiEBEREREREZFWmEQgIiIiIiIiIq0wiUBEREREREREWmESgYiIiIiIiIi0wiQCEREREREREWmFSQQiIiIiIiIi0gqTCERERERERESkFSYRiIiIiIiIiEgrTCIQERERERERkVaYRCAiIiIiIiIirTCJQERERERERERaYRKBiIiIiIiIiLTCJAIRERERERERaYVJBCIiIiIiIiLSCpMIRERERERERKQVJhGIiIiIiIiISCtMIhARERERERGRVphEICIiIiIiIiKtMIlARERERERERFphEoGIiIiIiIiItMIkAhERERERERFpxUjfARAREZF+PHjwAKIoapQ3NTXh/v37amXm5uYwNjYeqNCIiIhokBLErv71QERE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\n",
            "text/plain": [
              "<IPython.core.display.Image object>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 85
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "SMomnrvuRcpH"
      },
      "source": [
        "# Compile token char model\n",
        "model_4.compile(loss=\"categorical_crossentropy\",\n",
        "                optimizer=tf.keras.optimizers.Adam(), # section 4.2 of the paper says they use SGD, you might want to try this\n",
        "                metrics=[\"accuracy\"])"
      ],
      "execution_count": 86,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "b8cXk3BUSvqR"
      },
      "source": [
        "### Combining token and character data into a tf.data Dataset"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "t28sWexgTbsG"
      },
      "source": [
        "# Combine chars and tokens into a dataset\n",
        "train_char_token_data = tf.data.Dataset.from_tensor_slices((train_sentences, train_chars)) # make data\n",
        "train_char_token_labels = tf.data.Dataset.from_tensor_slices(train_labels_one_hot) # make labels\n",
        "train_char_token_dataset = tf.data.Dataset.zip((train_char_token_data, train_char_token_labels)) # combine data and labels\n",
        "\n",
        "# Prefetch and batch train data\n",
        "train_char_token_dataset = train_char_token_dataset.batch(32).prefetch(tf.data.AUTOTUNE)"
      ],
      "execution_count": 87,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "9uPcpppIUDMj"
      },
      "source": [
        "# Repeat the above steps for our validation data\n",
        "val_char_token_data = tf.data.Dataset.from_tensor_slices((val_sentences, val_chars)) # make data\n",
        "val_char_token_labels = tf.data.Dataset.from_tensor_slices(val_labels_one_hot) # make labels\n",
        "val_char_token_dataset = tf.data.Dataset.zip((val_char_token_data, val_char_token_labels)) # combine data and labels\n",
        "val_char_token_dataset = val_char_token_dataset.batch(32).prefetch(tf.data.AUTOTUNE)"
      ],
      "execution_count": 88,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "ypJshbHoU5-M",
        "outputId": "294a9207-88de-4b9d-91ef-5f7cb9fb960d"
      },
      "source": [
        "# Check out our training char and token embedding dataset\n",
        "train_char_token_dataset, val_char_token_dataset"
      ],
      "execution_count": 89,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(<PrefetchDataset shapes: (((None,), (None,)), (None, 5)), types: ((tf.string, tf.string), tf.float64)>,\n",
              " <PrefetchDataset shapes: (((None,), (None,)), (None, 5)), types: ((tf.string, tf.string), tf.float64)>)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 89
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "VulNCHT5VA30"
      },
      "source": [
        "### Fitting a model on token and character-level sequences"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "K2VmLu-ZVvGv",
        "outputId": "011b7e08-ed49-49cb-885b-5e66a3cc336f"
      },
      "source": [
        "# Fit the model on tokens and chars\n",
        "history_model_4 = model_4.fit(train_char_token_dataset,\n",
        "                              steps_per_epoch=int(0.1 * len(train_char_token_dataset)),\n",
        "                              epochs=3,\n",
        "                              validation_data=val_char_token_dataset,\n",
        "                              validation_steps=int(0.1 * len(val_char_token_dataset)))"
      ],
      "execution_count": 90,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Epoch 1/3\n",
            "562/562 [==============================] - 34s 48ms/step - loss: 1.1754 - accuracy: 0.5121 - val_loss: 0.7921 - val_accuracy: 0.6958\n",
            "Epoch 2/3\n",
            "562/562 [==============================] - 25s 44ms/step - loss: 0.8122 - accuracy: 0.6830 - val_loss: 0.7201 - val_accuracy: 0.7271\n",
            "Epoch 3/3\n",
            "562/562 [==============================] - 23s 40ms/step - loss: 0.7778 - accuracy: 0.7025 - val_loss: 0.7018 - val_accuracy: 0.7337\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "ro8rugKYWNHm",
        "outputId": "828be946-4b38-44bc-bf50-e88fab79a9f3"
      },
      "source": [
        "# Evaluate one the whole validation dataset\n",
        "model_4.evaluate(val_char_token_dataset)"
      ],
      "execution_count": 91,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "945/945 [==============================] - 20s 21ms/step - loss: 0.7031 - accuracy: 0.7315\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[0.7030972838401794, 0.7315305471420288]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 91
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "IRTZcYzZWnuV",
        "outputId": "9b06b187-9ef0-41a2-e2ab-a6a237dc49c7"
      },
      "source": [
        "# Make predictions using the token-character model hybrid\n",
        "model_4_pred_probs = model_4.predict(val_char_token_dataset)\n",
        "model_4_pred_probs"
      ],
      "execution_count": 92,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([[4.2659917e-01, 2.9139048e-01, 4.0054899e-03, 2.7395955e-01,\n",
              "        4.0453025e-03],\n",
              "       [3.1601429e-01, 4.1725042e-01, 1.9901453e-03, 2.6367852e-01,\n",
              "        1.0666000e-03],\n",
              "       [3.0143514e-01, 1.1346084e-01, 4.0722989e-02, 5.1282227e-01,\n",
              "        3.1558726e-02],\n",
              "       ...,\n",
              "       [8.0299139e-04, 1.0325610e-02, 4.8297979e-02, 3.3294794e-04,\n",
              "        9.4024044e-01],\n",
              "       [7.2415895e-03, 7.0295162e-02, 1.5365131e-01, 2.8205705e-03,\n",
              "        7.6599145e-01],\n",
              "       [3.8415033e-01, 3.7360224e-01, 1.8221650e-01, 2.2180034e-02,\n",
              "        3.7850838e-02]], dtype=float32)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 92
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "YpvbsLG-XIZE",
        "outputId": "f6d53a6d-5e4c-4b4c-f6e1-43d02697c982"
      },
      "source": [
        "# Format pred probs into pred labels\n",
        "model_4_preds = tf.argmax(model_4_pred_probs, axis=1)\n",
        "model_4_preds"
      ],
      "execution_count": 93,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<tf.Tensor: shape=(30212,), dtype=int64, numpy=array([0, 1, 3, ..., 4, 4, 0])>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 93
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "0xvLoGNzXcC0",
        "outputId": "d98e8ecd-0b48-4e3d-a653-e9a5798ea12d"
      },
      "source": [
        "# Get results of token-char-hybrid model\n",
        "model_4_results = calculate_results(y_true=val_labels_encoded,\n",
        "                                    y_pred=model_4_preds)\n",
        "model_4_results"
      ],
      "execution_count": 94,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "{'accuracy': 73.15305176750961,\n",
              " 'f1': 0.7292546002244985,\n",
              " 'precision': 0.7334872389494929,\n",
              " 'recall': 0.731530517675096}"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 94
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "flOpSBl5ezJT"
      },
      "source": [
        "## Model 5: Transfer learning with pretrained token embeddings + character embeddings + positional embeddings"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 202
        },
        "id": "-Q8NOvT-ilWF",
        "outputId": "3879e12f-7d35-4f8b-f2ad-e3e0368440bb"
      },
      "source": [
        "train_df.head()"
      ],
      "execution_count": 95,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>target</th>\n",
              "      <th>text</th>\n",
              "      <th>line_number</th>\n",
              "      <th>total_lines</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>0</th>\n",
              "      <td>OBJECTIVE</td>\n",
              "      <td>to investigate the efficacy of @ weeks of dail...</td>\n",
              "      <td>0</td>\n",
              "      <td>11</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>1</th>\n",
              "      <td>METHODS</td>\n",
              "      <td>a total of @ patients with primary knee oa wer...</td>\n",
              "      <td>1</td>\n",
              "      <td>11</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>2</th>\n",
              "      <td>METHODS</td>\n",
              "      <td>outcome measures included pain reduction and i...</td>\n",
              "      <td>2</td>\n",
              "      <td>11</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>3</th>\n",
              "      <td>METHODS</td>\n",
              "      <td>pain was assessed using the visual analog pain...</td>\n",
              "      <td>3</td>\n",
              "      <td>11</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>4</th>\n",
              "      <td>METHODS</td>\n",
              "      <td>secondary outcome measures included the wester...</td>\n",
              "      <td>4</td>\n",
              "      <td>11</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "      target  ... total_lines\n",
              "0  OBJECTIVE  ...          11\n",
              "1    METHODS  ...          11\n",
              "2    METHODS  ...          11\n",
              "3    METHODS  ...          11\n",
              "4    METHODS  ...          11\n",
              "\n",
              "[5 rows x 4 columns]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 95
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "kEc9NbPximOY"
      },
      "source": [
        "> 🔑 **Note:** Any engineered features used to train a model need to be available at test time. In our case, line numbers and total lines are available."
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "BuGXt5o2khNu"
      },
      "source": [
        "### Create positional embeddings"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "471uS0UnknRw",
        "outputId": "3992d7a6-cfb7-463e-d135-7936d2c4d89e"
      },
      "source": [
        "# How many different line numbers are there?\n",
        "train_df[\"line_number\"].value_counts()"
      ],
      "execution_count": 96,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "0     15000\n",
              "1     15000\n",
              "2     15000\n",
              "3     15000\n",
              "4     14992\n",
              "5     14949\n",
              "6     14758\n",
              "7     14279\n",
              "8     13346\n",
              "9     11981\n",
              "10    10041\n",
              "11     7892\n",
              "12     5853\n",
              "13     4152\n",
              "14     2835\n",
              "15     1861\n",
              "16     1188\n",
              "17      751\n",
              "18      462\n",
              "19      286\n",
              "20      162\n",
              "21      101\n",
              "22       66\n",
              "23       33\n",
              "24       22\n",
              "25       14\n",
              "26        7\n",
              "27        4\n",
              "28        3\n",
              "29        1\n",
              "30        1\n",
              "Name: line_number, dtype: int64"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 96
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 283
        },
        "id": "lpq1AlTSk3lI",
        "outputId": "c04671cb-f4d4-44fb-f47e-0290a0044453"
      },
      "source": [
        "# Check the distribution of \"line_number\" column\n",
        "train_df.line_number.plot.hist()"
      ],
      "execution_count": 97,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<matplotlib.axes._subplots.AxesSubplot at 0x7f541e5a5bd0>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 97
        },
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Wnrtk24SlPNJ",
        "outputId": "307509a8-d1ca-457a-d0fe-0b1e65aeebb6"
      },
      "source": [
        "# Use TensorFlow to create one-hot-encoded tensors of our \"line_number\" column\n",
        "train_line_numbers_one_hot = tf.one_hot(train_df[\"line_number\"].to_numpy(), depth=15)\n",
        "val_line_numbers_one_hot = tf.one_hot(val_df[\"line_number\"].to_numpy(), depth=15)\n",
        "test_line_numbers_one_hot = tf.one_hot(test_df[\"line_number\"].to_numpy(), depth=15)\n",
        "train_line_numbers_one_hot[:14], train_line_numbers_one_hot.shape"
      ],
      "execution_count": 98,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(<tf.Tensor: shape=(14, 15), dtype=float32, numpy=\n",
              " array([[1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
              "        [0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
              "        [0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
              "        [0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
              "        [0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
              "        [0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
              "        [0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
              "        [0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0., 0.],\n",
              "        [0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0., 0.],\n",
              "        [0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0., 0.],\n",
              "        [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.],\n",
              "        [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0.],\n",
              "        [1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],\n",
              "        [0., 1., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]],\n",
              "       dtype=float32)>, TensorShape([180040, 15]))"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 98
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "dVa2ShRSlyUL"
      },
      "source": [
        "Now we've encoded our line numbers feature, let's do the same for our total lines feature..."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "AhdFe-Zvm-na",
        "outputId": "5e379afe-fe21-41f0-8daa-76c1d47c38d9"
      },
      "source": [
        "# How many different numbers of lines are there?\n",
        "train_df[\"total_lines\"].value_counts()"
      ],
      "execution_count": 99,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "11    24468\n",
              "10    23639\n",
              "12    22113\n",
              "9     19400\n",
              "13    18438\n",
              "14    14610\n",
              "8     12285\n",
              "15    10768\n",
              "7      7464\n",
              "16     7429\n",
              "17     5202\n",
              "6      3353\n",
              "18     3344\n",
              "19     2480\n",
              "20     1281\n",
              "5      1146\n",
              "21      770\n",
              "22      759\n",
              "23      264\n",
              "4       215\n",
              "24      200\n",
              "25      182\n",
              "26       81\n",
              "28       58\n",
              "3        32\n",
              "30       31\n",
              "27       28\n",
              "Name: total_lines, dtype: int64"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 99
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 267
        },
        "id": "u1vw0ft2nHZD",
        "outputId": "f4587eeb-f5cd-4090-8e56-37409b4d94cc"
      },
      "source": [
        "# Check the distributions of total lines\n",
        "train_df.total_lines.plot.hist();"
      ],
      "execution_count": 100,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "USgTCDB2ncEz",
        "outputId": "84b95f9b-d0be-49cf-e5e3-0e04ae9de355"
      },
      "source": [
        "# Check the coverage of a \"total_lines\" value of 20\n",
        "np.percentile(train_df.total_lines, 98)"
      ],
      "execution_count": 101,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "20.0"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 101
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "e0plKNR0ntmC",
        "outputId": "37a6e545-dee0-425f-e98c-67ac071fb594"
      },
      "source": [
        "# Use TensorFlow to create one-hot-encoded tensors of our \"total_lines\" feature\n",
        "train_total_lines_one_hot = tf.one_hot(train_df[\"total_lines\"].to_numpy(), depth=20)\n",
        "val_total_lines_one_hot = tf.one_hot(val_df[\"total_lines\"].to_numpy(), depth=20)\n",
        "test_total_lines_one_hot = tf.one_hot(test_df[\"total_lines\"].to_numpy(), depth=20)\n",
        "train_total_lines_one_hot.shape, train_total_lines_one_hot[:10]"
      ],
      "execution_count": 102,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(TensorShape([180040, 20]), <tf.Tensor: shape=(10, 20), dtype=float32, numpy=\n",
              " array([[0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.,\n",
              "         0., 0., 0., 0.],\n",
              "        [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.,\n",
              "         0., 0., 0., 0.],\n",
              "        [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.,\n",
              "         0., 0., 0., 0.],\n",
              "        [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.,\n",
              "         0., 0., 0., 0.],\n",
              "        [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.,\n",
              "         0., 0., 0., 0.],\n",
              "        [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.,\n",
              "         0., 0., 0., 0.],\n",
              "        [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.,\n",
              "         0., 0., 0., 0.],\n",
              "        [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.,\n",
              "         0., 0., 0., 0.],\n",
              "        [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.,\n",
              "         0., 0., 0., 0.],\n",
              "        [0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 0., 1., 0., 0., 0., 0.,\n",
              "         0., 0., 0., 0.]], dtype=float32)>)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 102
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "7REXM1bWoH0y"
      },
      "source": [
        "### Building a tribrid embedding model\n",
        "\n",
        "1. Create a token-level model\n",
        "2. Create a character-level model\n",
        "3. Create a model for the \"line_number\" feature\n",
        "4. Create a model for the \"total_lines\" feature\n",
        "5. Combine the outputs of 1 & 2 using tf.keras.layers.Concatenate\n",
        "6. Combine the outputs of 3, 4, 5 using tf.keras.layers.Concatenate\n",
        "7. Create an output layer to accept the tribrid embedding and output label probabilities \n",
        "8. Combine the inputs of 1, 2, 3, 4 and outputs of into a tf.keras.Model"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "mpfCu6DUqoBL"
      },
      "source": [
        "# 1. Token inputs\n",
        "token_inputs = layers.Input(shape=[], dtype=\"string\", name=\"token_inputs\")\n",
        "token_embeddings = tf_hub_embedding_layer(token_inputs)\n",
        "token_outputs = layers.Dense(128, activation=\"relu\")(token_embeddings)\n",
        "token_model = tf.keras.Model(inputs=token_inputs,\n",
        "                             outputs=token_outputs)\n",
        "\n",
        "# 2. Char inputs\n",
        "char_inputs = layers.Input(shape=(1, ), dtype=\"string\", name=\"char_inputs\")\n",
        "char_vectors = char_vectorizer(char_inputs)\n",
        "char_embeddings = char_embed(char_vectors)\n",
        "char_bi_lstm = layers.Bidirectional(layers.LSTM(24))(char_embeddings)\n",
        "char_model = tf.keras.Model(inputs=char_inputs,\n",
        "                            outputs=char_bi_lstm)\n",
        "\n",
        "# 3. Line numbers model\n",
        "# inputs, shape = ?\n",
        "line_number_inputs = layers.Input(shape=(15,), dtype=tf.float32, name=\"line_number_input\")\n",
        "# dense layer with 32 units & relu activation\n",
        "x = layers.Dense(32, activation=\"relu\")(line_number_inputs)\n",
        "# combine inputs & dense layer into model\n",
        "line_number_model = tf.keras.Model(inputs=line_number_inputs,\n",
        "                                   outputs=x)\n",
        "\n",
        "# 4. Total lines model\n",
        "total_lines_inputs = layers.Input(shape=(20,), dtype=tf.float32, name=\"total_lines_input\")\n",
        "y = layers.Dense(32, activation=\"relu\")(total_lines_inputs)\n",
        "total_lines_model = tf.keras.Model(inputs=total_lines_inputs,\n",
        "                                   outputs=y)\n",
        "\n",
        "# 5. Combine token and char embeddings into a hybrid embedding\n",
        "combined_embeddings = layers.Concatenate(name=\"char_token_hybrid_embedding\")([token_model.output,\n",
        "                                                                              char_model.output])\n",
        "\n",
        "z = layers.Dense(256, activation=\"relu\")(combined_embeddings)\n",
        "z = layers.Dropout(0.5)(z)\n",
        "\n",
        "# 6. Combine positional embedding with combined token and char embeddings\n",
        "tribrid_embeddings = layers.Concatenate(name=\"char_token_positional_embedding\")([line_number_model.output,\n",
        "                                                                                 total_lines_model.output,\n",
        "                                                                                 z])\n",
        "\n",
        "# 7. Create output layer\n",
        "output_layer = layers.Dense(num_classes, activation=\"softmax\", name=\"output_layer\")(tribrid_embeddings)\n",
        "\n",
        "# 8. Put together model with all kinds of inputs\n",
        "model_5 = tf.keras.Model(inputs=[line_number_model.input,\n",
        "                                 total_lines_model.input,\n",
        "                                 token_model.input,\n",
        "                                 char_model.input],\n",
        "                         outputs=output_layer,\n",
        "                         name=\"model_5_tribrid_embedding_model\")"
      ],
      "execution_count": 103,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "RZS1nDRqvFAB",
        "outputId": "dbbff796-9a40-4bab-c721-4979fe1a0a4a"
      },
      "source": [
        "# Get a summary of our tribrid embedding model\n",
        "model_5.summary()"
      ],
      "execution_count": 104,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Model: \"model_5_tribrid_embedding_model\"\n",
            "__________________________________________________________________________________________________\n",
            "Layer (type)                    Output Shape         Param #     Connected to                     \n",
            "==================================================================================================\n",
            "char_inputs (InputLayer)        [(None, 1)]          0                                            \n",
            "__________________________________________________________________________________________________\n",
            "token_inputs (InputLayer)       [(None,)]            0                                            \n",
            "__________________________________________________________________________________________________\n",
            "char_vectorizer (TextVectorizat (None, 290)          0           char_inputs[0][0]                \n",
            "__________________________________________________________________________________________________\n",
            "universal_sentence_encoder (Ker (None, 512)          256797824   token_inputs[0][0]               \n",
            "__________________________________________________________________________________________________\n",
            "char_embed (Embedding)          (None, 290, 25)      700         char_vectorizer[2][0]            \n",
            "__________________________________________________________________________________________________\n",
            "dense_7 (Dense)                 (None, 128)          65664       universal_sentence_encoder[2][0] \n",
            "__________________________________________________________________________________________________\n",
            "bidirectional_1 (Bidirectional) (None, 48)           9600        char_embed[2][0]                 \n",
            "__________________________________________________________________________________________________\n",
            "char_token_hybrid_embedding (Co (None, 176)          0           dense_7[0][0]                    \n",
            "                                                                 bidirectional_1[0][0]            \n",
            "__________________________________________________________________________________________________\n",
            "line_number_input (InputLayer)  [(None, 15)]         0                                            \n",
            "__________________________________________________________________________________________________\n",
            "total_lines_input (InputLayer)  [(None, 20)]         0                                            \n",
            "__________________________________________________________________________________________________\n",
            "dense_10 (Dense)                (None, 256)          45312       char_token_hybrid_embedding[0][0]\n",
            "__________________________________________________________________________________________________\n",
            "dense_8 (Dense)                 (None, 32)           512         line_number_input[0][0]          \n",
            "__________________________________________________________________________________________________\n",
            "dense_9 (Dense)                 (None, 32)           672         total_lines_input[0][0]          \n",
            "__________________________________________________________________________________________________\n",
            "dropout_2 (Dropout)             (None, 256)          0           dense_10[0][0]                   \n",
            "__________________________________________________________________________________________________\n",
            "char_token_positional_embedding (None, 320)          0           dense_8[0][0]                    \n",
            "                                                                 dense_9[0][0]                    \n",
            "                                                                 dropout_2[0][0]                  \n",
            "__________________________________________________________________________________________________\n",
            "output_layer (Dense)            (None, 5)            1605        char_token_positional_embedding[0\n",
            "==================================================================================================\n",
            "Total params: 256,921,889\n",
            "Trainable params: 124,065\n",
            "Non-trainable params: 256,797,824\n",
            "__________________________________________________________________________________________________\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 631
        },
        "id": "p9Iaa-rbviNl",
        "outputId": "4b1c0c57-7c6c-4cb7-b58b-f3535b974ff7"
      },
      "source": [
        "# Plot model_5 to explore it visually...\n",
        "from tensorflow.keras.utils import plot_model\n",
        "plot_model(model_5, show_shapes=True)"
      ],
      "execution_count": 105,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "image/png": "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qufw4cMqKSnRzJkzFRgYKLPZLJPJZKcof+bv76/x48dr48aNWrhwoaKjo23233HHHTKbzTpw4MANj69Jf3v06KGWLVtq3759Ntv37t2r4uJi3XfffdXviK7/enXdunVauHChunfvbt3+P//zP7ftR32qaixPP/20pk2bppiYGM2ZM0dLly6t0ZchTz75pMrKyvTiiy9q5syZ1YqlsZxfe/291FXsANCQ1ORa9+CDD6pt27Z67bXX9PXXX9v8kKEhzbE1lZ6eLsMw1K9fP+s2Z2fnGt21ev78eX377beSric4VqxYod69e1u3OZI9+1kVX3/9tTw8PCRV/bOtj4+PJkyYoM2bN+svf/mLpk2bZrO/KbzfAAAAAKCpIml0A25ubpo/f7527typWbNm6dy5cyovL1deXl61viwICAiQJO3YsUNFRUXKyMio9bNgbiY2NlalpaW6evWqfvvb39rsM5vNmjJlitavX6+kpCTl5uaqrKxMmZmZunDhQpX627p1a50/f16nTp1SXl6enJycFBsbq3fffVcpKSnKzc3V4cOHNWPGDPn5+Wn69OnV7kNubq6ioqJ0zz33aO7cuZKkoqIi7du3TwcOHLhtP25l+/bt8vT0VFxcXLXjupGqxLJmzRp16tRJo0ePliQtX75c3bp106RJk6xLxkmVx/ZGX/pMnDhRrVu31v3336/Q0NBqxdJYzm9V/l6qMlZms9nusQOAo9nzOj18+HBFRkYqLi5OX3/9taSqzWsNTXl5ua5evarS0lIdOnRI0dHRCggIUGRkpLVMcHCwrly5os2bN6ukpEQXL17U6dOnK9X1/9i777iorrx/4J9LnRk6WMBCpNjFRKOJkhh13biKDzYEscRFV2NJglgS1NhFojERXirEx4bPBiNFiWQ1lp9rWOPGuBo1GhKNomAXG3XonN8fPszjZCgzMDAwfN6vF39475lzvvfcmXuO85177h/7NyMjA7NmzcKVK1dQXFyMCxcuICMjQ5Wo0fe8wlDHWV2iqaSkBA8fPkRKSooqaaTL3Hb27NkoKirCwYMH4evrq7avKb7fiIiIiIiImg3RDIwbN06MGzdO59dt2bJFeHl5CZlMJmQymejVq5eIiooS69evF3K5XAAQHTt2FGlpaSI2NlY4ODgIAKJdu3bil19+EUIIERoaKhwdHYW9vb3w9/cXW7ZsEQCE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DBwJERER1QdJkhAfH68a84mIiIiIiMjgEvlMIyIiIiIiIiIiIiIiIgKTRkRERERERERERERERMSkERERERERERERERERETFpRERERERERERERERERGDSiIiIiIiIiIiIiIiIiMCkEREREREREREREREREYFJIyIiIiIiIiIiIiIiIgKTRkRERERERERERERERAQmjYiIiIiIiIiIiIiIiAhMGhERERERERERERERERGYNCIiIiIiIiIiIiIiIiIwaURERERERERERERERERg0oiIiIiIiIiIiIiIiIjApBERERERERERERERERGBSSMiIiIiIiIiIiIiIiICk0ZEREREREREREREREQEJo2IiIiIiIiIiIiIiIgITBoRERERERERERERERERmDQiIiIiIiIiIiIiIiIiMGlEREREREREREREREREYNKIiIiIiIiIiIiIiIiIwKQRERERERERERERERERgUkjIiIiIiIiIiIiIiIiApNGREREREREREREREREBCaNiIiIiIiIiIiIiIiICEwaEREREREREREREREREZg0IiIiIiIiIiIiIiIiIjBpRERERERERERERERERGDSiIiIiIiIiIiIiIiIiMCkEREREREREREREREREYFJIyIiIiIiIiIiIiIiIgKTRkRERERERERERERERATAzNABEBEplUoUFRWpbSsuLgYAPHv2TG27paUlFApFg8VGREREdZeVlQUhhMb2/Px8jbHe2toa5ubmDRUaERERERERvUASlf3vjYioAUVHR+O9997TqmxUVBTmzJlTzxERERGRPv3pT3/Cd999V2M5U1NT3L17F61bt26AqIiIiIiIiOgPErk8HREZnL+/P0xNTWssZ2pqCn9//waIiIiIiPRpwoQJkCSp2jImJiZ46623mDAiIiIiIiIyICaNiMjgWrZsiSFDhlSbODI1NcWf//xntGzZsgEjIyIiIn0YN24czMyqXxlbkiRMmTKlgSIiIiIiIiKiyjBpRESNwuTJkyt91kEFIQQmT57cgBERERGRvjg4OGDo0KHV/kDExMQEY8aMacCoiIiIiIiI6I+YNCKiRmH06NHVPvTazMwMI0eObMCIiIiISJ8mT56M8vLySveZmZlhxIgRsLOza+CoiIiIiIiI6EVMGhFRo2BjYwNfX99KE0dmZmYYNWoUbG1tDRAZERER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HVtx4svJyVFOTk6+D3Vv3bolScUe/QTAdvQT5befuFNh7ast7GnXaa8BAACA4iFpBABwiMTERBmGoY4dO1qWubq63nW6ImdUs2ZNmUwmJScn27Xd7Nmz1axZM/34449Wy1u1aqWqVavmefn4rl27dOvWLd1///121VO/fn2ZzWbt3bvXru3uZBiGJk2apAMHDmj9+vX5/sK9MMuXL1ejRo3UrVs3SbfPd+/evbVt2zarF9Nv2rRJJpNJ/fr1K7X4Hn300TzLdu/eLcMwFBYWlmdd7rmtVauWXTEBKDr6ifLXT0j2t6+FKUq/Q3sNAAAAFA9JIwBAmcjJydHVq1eVlZWl/fv3KyoqSg0aNNCIESMsZUJCQnTlyhWtX79emZmZunjxYp5RKJIUEBCgs2fP6sSJE0pNTVVmZqY2bdokX19fzZ07twy/1W1eXl4KDg7W6dOn7doud/ohFxeXPMsnTpyodevWacWKFUpJSdGBAwc0duxYBQUFafTo0XbX8+yzz2rlypWKjY1VSkqKsrOzdfr0aZ07d06SFBERoVq1amnPnj0F7uenn37SwoULtXz5crm5uVlNYWQymfTWW29Zyj7wwAM6efKksrKydOLECb3yyivasmWLPv74Y8u7NCRp+vTpunDhgmbMmKEbN25ox44dWrRokUaMGKGmTZtaypV0fGfOnNGqVat07do1ZWZmaseOHXr++efVoEEDjR07Ns++c89taGioDUccQFHQT+RV3voJyf72tTD2tOu5aK8BAACA4iFpBAC4q/fee08dOnSQJE2aNEn9+/dXbGyslixZIun2NGLHjx/X8uXLNXHiRElSr169dOTIEcs+bt68qdDQUHl6eqpr165q0qSJvv32W6upasaNG6eHHnpITzzxhJo2barZs2dbppcJCwvTqVOnJEljx45VzZo11aJFC/Xu3VtXrlwpk+NQmD59+ujgwYNW75347LPPFBISomPHjqlDhw56+eWX82zXsWNHRUdH51k+Y8YMzZs3T7NmzVL16tXVrVs3NWzYUImJifL29pYku85BTEyMJkyYoAULFigwMFBBQUGKiorS1atXJd2ezicpKUkbNmwo8DsahmHz8fDz81Pbtm3l6empdu3a6dChQ/ruu+8sU9Platmypb7++mt98803CgwM1KBBgzRy5Ei9//77VuVKOr5evXpp2rRpqlevnry8vDRkyBB17txZO3fuVGBgYJ7yu3fvVt26dYs8ZR5Q0dFP3F1l6Cdy92lL+7pz50516dJFderU0a5du7Rv3z4FBQWpc+fO2rZtmyT72vVctNcAAABA8ZiMO+7EV69eraFDhxbpBh0A4HxMJpPi4+M1ZMgQh8UwZswYJSQk6PLlyw6LwR7h4eGSpISEBJu3OXr0qJo3b664uDgNHz68tEIrNTk5OerevbtGjBihkSNHOjqcPBwZ3+XLl1WvXj3NmTPH8qDVVmX99+cMf+8of5zh/r+89ROS/X9v9BOlrzy11wAAAICTSmCkEQCgTNjz8u/yKCQkRLNmzdKsWbN0/fp1R4djl+zsbK1fv16pqamKiIhwdDh5ODq+mTNnqm3btoqMjCzzuoHKhH7CeTm6HbYV7TUAAABQfCSNAAAoIVOmTFF4eLgiIiLsftm5IyUmJmrt2rXatGmTvLy8HB1OHo6Mb/Hixdq7d682btwoNze3Mq0bQMVDP1F6aK8BAACAklHspFGHDh3k4uKitm3b3rXsxo0bVa1aNX3xxRcFlnn++efl4+Mjk8mkvXv32rVtaXJ0/W+99ZZq1qwpk8mkDz74oMj7ycnJ0ZIlS9SpU6e7lt2yZYumTJlSYnWXpcK+5+eff64FCxYU+desa9euVXBwcJ4X8bq6uqp69er6wx/+oHXr1uXZjuu/6Gy5BnOv1zvPT+3atW2aAmbfvn2KiIhQo0aN5OHhoerVq6tNmzaaM2eOpUxERESe817Q58svv8wTy/Tp0wuNYfHixTKZTKpSpYqaNWumbdu2Fft6dQZTp05VXFyckpOT1ahRI61Zs8bRIZWquXPnKjIyUm+++aajQ7FZjx499Omnn6p27dqODiVfjopvw4YNysjIUGJiovz9/cu0bkcpqB8qT7p3715g21y1alW79lVQn+/u7q6aNWuqe/fuWrRokeWdLyga+gnn5+z9RGVsrwEAAIDSUuyk0e7du/O81LogtsyT/tFHH2n58uVF2rY0Obr+V155Rd9//32x9nHkyBE9+OCDio6OVlpaWqFlZ8yYoaVLl2rq1KklUndZutv37Nevn8xms3r06KFr167Zvf9Bgwbp+PHjaty4sapVqybDMGQYhi5evKj4+HidOXNGgwYNUnx8vNV2XP9Fd7dr8PfX653n5/z581qxYkWh+z9w4IA6deqk2rVr69tvv1VycrK+//579erVS4mJiVZlv/nmG127dk2ZmZk6d+6cpNvX1K1bt3Tjxg0lJSVp1KhRkqyvFen2+c3MzMw3huzsbC1dulSS9PDDD+vQoUN68MEHi329OoN58+YpIyNDhmHo119/1eDBgx0dUqnr2bOn5s+f7+gwUEz9+/fXlClT5OLi4uhQykxB/VBF0aVLF7vK59fn5+TkKCkpSatXr1ajRo00adIktWzZUj/88EMpRV3x0U+guCpjew0AAACUlhKbns5kMt21TJ8+fZScnKy+ffvavf/ibGuv9PT0PCNUyrL+0rBv3z5NnjxZY8eOveuosPnz52vVqlVavXq1fHx8ilRffsewLNj6PcePH682bdqod+/eysrKKpG6/f391aNHD73zzjuSbr9U+ve4/ktHSVyvb731lvz8/BQTE6OGDRvKbDarSZMmmj17tjw9PS3lTCaTOnfurGrVqsnV1dVquZubm7y8vFSjRg3df//9eeq4//77df78ea1fvz7fGNauXau6devmu640rlcAqKjMZrNSUlIsP+rI/YwePVqvvvpqsfdvMpnk5+en7t27Ky4uTqtXr9aFCxcsfSUAAAAAAOVZiSWNSnLeaFsSUKXp448/VlJSkkNjKGlt2rTR2rVr9eSTT8rDw6PAckePHtX06dP1xhtvyGw2F7k+Rx1DW7+ndPtFuXv37lVMTEyJxtCwYUNJKvKoEK5/25XU9Xr58mUlJyfrypUrVsvd3d2tpuRb3pv7LAAAIABJREFUuXKlTfP4jx49Wn/84x+tlo0bN06S9P777+e7zeLFizVx4sQC91la1ysA3MnR/VBxbd68Oc+PCE6dOqX//ve/evjhh0u8vsGDB2vEiBFKSkoqN9P4AgAAAABQkBJLGh09elTNmjWTt7e3PD091bVrV23fvt2yfvv27WrQoIFMJpPee+89y3LDMLRo0SI1bdpUHh4eqlatmv70pz9Z7Tu/bRcuXCgvLy/5+PgoKSlJEydOVN26dXX48GFlZ2fr9ddfV4MGDeTp6anWrVvnmSrs73//u9q3by+z2Sxvb281bNhQs2fPVlRUlCZOnKhjx47JZDIpJCSk0NgXL16s5s2by8PDQ/7+/nr88cd16NAhS5nY2Fh5e3vLy8tLGzZs0GOPPSZfX1/Vq1dPK1eutIrpu+++U4sWLVStWjWZzWaFhobq66+/Lv7JscPSpUtlGIb69et317L/+te/9MADD8jLy0u+vr4KDQ1VSkpKvscwJiZG3t7eqlKliu6//37VqlVLbm5u8vb2Vrt27dS1a1fVr19fZrNZfn5+JfJL4Lvx9/dXt27dFBMTY5l+bfPmzfL19dXcuXOLvN/9+/dLkrp162ZZxvVfOte/PddrYTp06KAbN27o4Ycf1r///e9i7asgDz/8sJo3b65vv/1Whw8ftlr373//W2lpaerZs2eB2+d3vQJAcdnSD0kqtG+xp60v6N7hbnUU1/z58zV+/HirZSXR5+caMWKEJGnTpk2WZeX9mAEAAAAAKqcSSxr5+/tr8+bNSk5O1g8//KDMzEw98sgjOnLkiKTbc8jn906S6dOna9KkSRo9erQuXLig8+fPa/LkyVZl8tv21VdfVXR0tK5fv6558+apUaNG6tixowzD0OTJk7Vw4UItWbJE586dU9++fTVs2DDLXPMxMTF6+umnNXjwYJ09e1anT5/W1KlTdfjwYcXExKhv375q3LixDMPQ0aNHC4x95syZmjJlil577TUlJSVp27ZtOnXqlLp27aoLFy5Iuj26YMKECUpPT5ePj4/i4+N17NgxBQcHa9SoUVbvN7lw4YKGDh2qEydO6OzZs6pataqefPLJ4p0YO3311Vdq2rTpXUdT3LhxQ/369dPgwYN15coVHTlyRE2aNNGtW7fyPYZRUVH605/+JMMw9P777+vXX3/V+fPn9eCDD+rHH3/UlClT9OOPP+rKlSt65plntGjRIu3bt6/Uv+99992nM2fOWOrKzs6WJOXk5Ni9r/T0dG3evFmvvPKKevbsaTVqhOu/dK5/W6/Xu3n11VfVvn177du3T126dFHLli21cOHCPCOPimvMmDGSlOeX6G+//baio6Pvuv2d1ysAFJct/ZCkQvsWW9v6wu4d7lZHcZw5c0aJiYkaNGiQ1fLi9Pl3yp0S9/jx45Zl5fmYAQAAAAAqrxJLGvn4+Khhw4ZydXVVy5YttXz5ct28eVMffvhhgdukp6dryZIl+sMf/qDo6Gj5+fnJ09NTAQEBdtU9f/58vfTSS1q7dq0aNmyo2NhYDRgwQIMGDZKfn5+mTZsmNzc3xcXFKTMzU2+88YYeeughTZ48WQEBAfL399dzzz2nDh062Fxnenq6Fi9erIEDB2r48OGqVq2aQkND9cEHH+jSpUv5fu9OnTrJ19dXNWrUUEREhG7cuKHffvvNsn7w4MGaMWOG/P39FRAQoH79+uny5cu6ePGiXcejqG7cuKFff/1VjRs3vmvZEydOKCUlRS1btpTZbFatWrW0du1aVa9e/a7btmjRQl5eXgoMDNQTTzwhSWrQoIGqV68uLy8vDR8+XJKsRqyUlnvvvVeSdODAAUm3392TkpKi6dOn27R9cnKyTCaTTCaTvLy8LL8UfvLJJ+86ZSPXf/Guf3uu17vx9PTU999/r3feeUfNmjXTTz/9pEmTJql58+b617/+Vez953rmmWfk7e2tv/71r0pPT5d0+wHj7t27NWzYsLtuf+f1CgDFYWs/dPPmzUL7lt8rrK0v7N7BnjrsNX/+fL388suqUsX6ttfePr8wPj4+MplMSk1NlVT+jxkAAAAAoPIqsaTRnUJDQ1WtWjXLVF35OXr0qNLS0tSjR48Sq/fw4cNKS0tTq1atLMs8PT1Vu3ZtHTp0SPv379e1a9f06KOPWm3n4uKSZ9qSwhw8eFDXr19X+/btrZZ36NBB7u7u2rVrV6Hbu7u7S5LVSIs75SYdcn8JW9qSkpJkGIZNozaCg4NVs2ZNDR8+XDNnztSJEyeKVGfuccjKyrIsy/3ehR2bkpL7XXNHxtirWrVqlhdsZ2Zm6vTp05owYYIiIyPVunVrXbp0qcBtuf6Ld/3bc73aws3NTZGRkfr555+1c+dOPf7440pKSlJ4eLiuXr1aInVUq1ZNw4YN09WrV7Vq1SpJ0pIlSzRu3DjLMSlMca7XoUOHWhKcfO7+WbNmjdasWePwOPiU/48zs7UfulvfUpA72/rC7h2KWsfdnD17Vp9//rll+rjScuPGDRmGIV9fX0nl95g5+u+lvH0k+teK9AEAAABwm2tp7tzNza3Qh8KnT5+WJNWoUaPE6rxx44Ykadq0aZo2bZrVuqCgIMsc8H5+fsWq59q1a5KkqlWr5lnn5+dn+aWpPb766istWrRIBw8eVEpKSpkkTX7v5s2bkiQPD4+7lvX09NTWrVs1efJkzZ07V7NmzdKQIUMUFxcnT0/P0g61xOTGmvvdi8PV1VV169bVs88+q+zsbI0aNUpvvvmm3n777XzLc/1bs/f6t+d6tdf//d//6bPPPtO4ceP0/vvv69tvv9XAgQNLZN/jxo3T8uXL9cEHH2jAgAFKSEjQzz//bNO2xbleo6KiFBYWZvd2ldWSJUskSRMmTHBwJCjvhg4d6ugQCmRrP3S3vsVWhd07lFQdd1qwYIFGjRols9lc5H3Y4pdffpEkNWvWTFL5PWa8D8k+Q4cOpX+tQJy5vQYAAADKUqkljbKysnTlyhU1aNCgwDK5/4HPyMgosXpzH3wsWbJEUVFRedbnvoC+sBEgtsh96J7fw/Fr166pXr16du3vt99+04ABAzRw4ED95S9/UZ06dfTuu+/q1VdfLVac9sh9IG3ryKaWLVvqiy++0MWLF7V48WLNnz9fLVu2LJFpXspK7jsBSjrRFRoaKkn66aefCizD9f8/Rbn+7b1ef2/btm36z3/+Y0kIDBo0SPHx8XJ1tW4Sn3rqKb3//vtKS0uzu46CtG3bVh07dtTOnTs1evRohYeHy9/f36Zti3O9hoWFaciQIXZvV1klJCRIEscMxebMDyFt7Yfu1rfYo6B7h4iIiBKrI9f58+f1j3/8w9L3labNmzdLkh577DFJ5feY0ebZZ+jQofSvFYgzt9cAAABAWSq16em+/fZb5eTkqF27dgWWadWqlapUqVKi7wypX7++zGaz9u7dm+/6hg0bKiAgQN98802x6mnVqpWqVq2a50XDu3bt0q1bt3T//ffbtb8DBw4oMzNT48aNU3BwsMxmc5lPk1CzZk2ZTCYlJyfftezZs2ctCZEaNWrozTffVLt27QpNkjij3O9aq1atEt3vf/7zH0lS06ZNCyzD9f8/Rbn+7ble7/Sf//xH3t7eln9nZGTke+3mPmhs3bq13XUUZty4cZKkNWvW2DWSpbSuVwCVk6390N36FlsVdu9QUnX83oIFCzR8+HC73xVor/Pnz2vJkiWqV6+eRo4cKan8HjMAAAAAAEosaXTr1i0lJycrKytLe/bsUWRkpO65555C55CvUaOGBg0apDVr1ujjjz9WSkqK9u/frw8//LDIcZjNZj377LNauXKlYmNjlZKSouzsbJ0+fVrnzp2Th4eHpk6dqm3btikyMlJnzpxRTk6OUlNTLf8pDwgI0NmzZ3XixAmlpqbmO02W2WzWxIkTtW7dOq1YsUIpKSk6cOCAxo4dq6CgII0ePdquuHNHZG3ZskU3b97UkSNH7vpemJLm5eWl4OBgy3Q1hTl79qzGjBmjQ4cO6datW/rxxx918uRJdezYUZJtx9AZ5H7X3JFBmzZtkq+vr+bOnWvzPtLT05WTkyPDMHT27FnFxcVp2rRpql69eqEJAa7//ynK9W/P9ZorMzNTFy5cUGJiolXSSJIGDBig1atX69q1a0pOTtaGDRs0efJk9e/fv8STRkOGDFH16tU1YMAABQcH27zdndcrABSHrf3Q3foWWxV271BSdeS6cOGC/vKXvxTaD9vb5xuGoevXr1v6/IsXLyo+Pl6dO3eWi4uL1q9fb3mnUXk8ZgAAAAAASJKMO8THxxv5LC5UXFyc8dBDDxk1a9Y0XF1djcDAQOOJJ54wTp48aSnz7rvvGrVr1zYkGV5eXka/fv0MwzCM1NRU4/nnnzcCAwONqlWrGl26dDFef/11Q5JRr149Y9++ffluu2DBAsPT09OQZNSvX9/4+9//bqkrIyPDmDRpktGgQQPD1dXVqFGjhjFo0CDj4MGDljLvvfeeERoaapjNZsNsNhv33XefsWzZMsMwDGPPnj3GPffcY3h6ehpdunQxpk2blm/sOTk5xqJFi4x7773XcHNzM/z9/Y0BAwYYhw8fttSzbNkyw8vLy5Bk3HvvvcaxY8eMDz/80PD19TUkGffcc4/xyy+/GIZhGJMmTTICAgIMPz8/Izw83HjvvfcMSUbjxo2NqKgoo1atWoYkw9vb2xg4cKBd52jHjh1G586djaCgIEOSIcmoXbu20alTJ+Nf//qXpVxkZKTh5uZmpKWlWZa9/fbbeeo+ceKE0alTJ8Pf399wcXEx6tSpY7z22mtGVlZWvsdwypQpluPQsGFD47vvvjPmz59vVKtWzZBk1KpVy/j000+NVatWWery9/c3Vq5cWSrfM1efPn2MunXrGjk5OYZhGMbGjRsNHx8fY86cOQXWsW7dOqNx48aW/f/+4+HhYdx7773GuHHjjN9++82yDdd/6Vz/+V2vhZ2f33/WrVtn2eabb74xhg4dajRu3Njw8PAw3N3djaZNmxozZ840bt68mecaSElJMR588EEjICDAkGRUqVLFCAkJMebOnVvgtVK9enXjpZdesqx79dVXje+//97y798f5ypVqhgtWrQwvvvuO6v93Xm92kqSER8fb9c2ld3gwYONwYMHOzoMVABl/fdnb3229EOGUXjfYmtbf7d7B1v6L1tFR0cbw4cPL7SMLX3+559/brRu3drw8vIy3N3djSpVqhiSDJPJZPj5+RkPPPCAMWvWLOPy5ct5ti1Px6wo9/+gf61oOJ8AAACAYRiGsdpkGIbx+yTS6tWrNXToUN2xGJXE0aNH1bx5c8XFxWn48OGODqdUXb58WfXq1dOcOXM0ceJER4eDIuB6tY3JZFJ8fDzvXLBDeHi4pP+92wgoqrL+++PvHUXB/X/R8PdWsXA+AQAAAElSQqm90wjlU0hIiGbNmqVZs2bp+vXrjg6nVM2cOVNt27ZVZGSko0NBEXG9AgAAAAAAAEDJIWlUTh06dEgmk+mun4iICLv3PWXKFIWHhysiIkLJycmlEL3tSut7Ll68WHv37tXGjRvl5uZWStGjLDjT9VpauF6xZcsWTZkyRWvXrlVwcLCl7XvqqafylO3Zs6d8fHzk4uKili1bas+ePQ6IuOhu3rypZs2aadq0aXnW/eMf/1CHDh3k4+Oje+65R88++6zOnz9vWf/5559rwYIFys7OLsuQUcpK854HcJTK0K7n5ORoyZIl6tSpU77rZ82apRYtWsjX11ceHh4KCQnRq6++mu8PgWj/AQAAgLJD0qicatasmQzDuOtn1apVRdr/3LlzFRkZqTfffLOEI7dPaXzPDRs2KCMjQ4mJifL39y/F6FFWnOV6LQ1cr5gxY4aWLl2qqVOnatCgQTp+/LgaN26swMBArVixQl999ZVV+W+++UYJCQnq27evDh48qHbt2jko8qJ57bXXdPjw4TzL4+Pj9eSTTyo8PFynT5/Whg0btG3bNj322GPKysqSJPXr109ms1k9evTQtWvXyjp0lJLSvucBylplaNePHDmiBx98UNHR0UpLS8u3zNatW/XSSy/pxIkTunTpkubNm6eYmBjLFLG5aP8BAACAskXSCAXq2bOn5s+f7+gwSlz//v01ZcoUubi4ODoUlCCuV+eVnp5e4K+My1MdjjB//nytWrVKq1evlo+Pj9W6pUuXqkqVKho9enSFGWX3/fff67///W++6/785z+rTp06+tOf/qRq1aqpbdu2io6O1t69e7Vr1y5LufHjx6tNmzbq3bu35WEiAOdXWfqKytCu79u3T5MnT9bYsWPVtm3bAstVrVpVo0ePVkBAgHx8fDRkyBANGDBAmzdv1qlTpyzlaP8BAACAskXSCABQqj7++GMlJSWV+zrK2tGjRzV9+nS98cYbMpvNedZ36tRJUVFROnPmjF555RUHRFiy0tPT9ac//UkxMTH5rj916pSCgoJkMpksy+rXry9JOnnypFXZmTNnau/evQXuC4DzqQx9RWVp19u0aaO1a9fqySeflIeHR4Hlvvzyyzw/iqlevbokWY1Oov0HAAAAyhZJIwCAFcMwtHjxYjVv3lweHh7y9/fX448/rkOHDlnKREZGyt3dXbVr17Yse/HFF+Xt7S2TyaRLly5JkqKiojRx4kQdO3ZMJpNJISEhWrp0qcxms2rWrKkxY8YoKChIZrNZnTp1svrFcHHqkKTNmzfL19dXc+fOLdXjVVqWLl0qwzDUr1+/AsvMmTNHTZo00UcffaQtW7YUuj9bzmtsbKy8vb3l5eWlDRs26LHHHpOvr6/q1aunlStXWu0vOztbr7/+uho0aCBPT0+1bt1a8fHxRf6+r732ml588UXVqFEj3/XBwcF5Hvbmvs8iODjYarm/v7+6deummJgYGYZR5JgAFIy+wn6VrV0vijNnzsjT01ONGjWyLKP9BwAAAMoWSSMAgJWZM2dqypQpeu2115SUlKRt27bp1KlT6tq1qy5cuCDp9oOvIUOGWG23bNkyvfHGG1bLYmJi1LdvXzVu3FiGYejo0aOKjIzUiBEjlJaWpvHjx+vEiRPas2ePsrKy9Mgjj1impClOHZIsL8POyckpuYNThr766is1bdpUXl5eBZbx9PTUJ598oipVqmjUqFG6ceNGgWVtOa/jxo3ThAkTlJ6eLh8fH8XHx+vYsWMKDg7WqFGjlJmZadnf5MmTtXDhQi1ZskTnzp1T3759NWzYMP3www92f9d///vfOnbsmIYNG1ZgmalTp+r8+fN69913lZqaqoMHDyomJkaPPvqoOnbsmKf8fffdpzNnzmjfvn12xwPg7ugr7FeZ2vWiSEtL09atWzVq1Ci5u7tbltP+AwAAAGWLpBEAwCI9PV2LFy/WwIEDNXz4cFWrVk2hoaH64IMPdOnSJX344YclVperq6vl19EtWrRQbGysUlNTFRcXVyL779Onj1JSUjR9+vQS2V9ZunHjhn799Vc1btz4rmXDwsI0YcIEnThxQpMnT863TFHOa6dOneTr66saNWooIiJCN27c0G+//SZJunnzpmJjYzVgwAANGjRIfn5+mjZtmtzc3Ow+f+np6YqKilJsbGyh5bp166ZJkyYpMjJSvr6+atWqlVJTU/XRRx/lW/7ee++VJB04cMCueADcHX2F/SpTu15U8+bNU1BQkObMmWO1nPYfAAAAKFskjQAAFgcPHtT169fVvn17q+UdOnSQu7u71ZRAJa19+/by8vKymlanskpKSpJhGIX+Gv335syZo6ZNm2rZsmXavn17nvXFPa+5v/jO/UX64cOHlZaWplatWlnKeHp6qnbt2nafv6lTp+qFF15Q3bp1Cy332muv6cMPP9Q///lPXb9+XcePH1enTp0UFhZm9cL0XLnHLvfX9gBKDn2F/SpTu14U69at0+rVq/X111/Lx8fHah3tPwAAAFC2SBoBACyuXbsmSapatWqedX5+fkpNTS3V+j08PHTx4sVSraM8uHnzpiQV+gLx3zObzYqLi5PJZNLIkSOVnp5utb6kz2vudEnTpk2TyWSyfE6ePGn18vK72b59uw4cOKDnn3++0HLnzp3TggUL9MILL+jhhx+Wt7e3GjVqpOXLl+vs2bNatGhRnm08PT0l/e9YAig59BX2qyztelGsWrVK8+fPV2Jioho2bGi1jvYfAAAAKHskjQAAFn5+fpKU78Oma9euqV69eqVWd2ZmZqnXUV7kPvDKfdeGLcLCwhQdHa0jR45o9uzZVutK+rzWqFFDkrRkyRIZhmH12bFjh837+fjjj/XPf/5TVapUsTygzN333LlzZTKZ9MMPP+jIkSPKzs5WnTp1rLb39fVVQECADh48mGfft27dkvS/Ywmg5NBX2K+ytOv2evfdd7VixQpt3bo1TxsvifYfAAAAcACSRgAAi1atWqlq1ap5Xnq9a9cu3bp1S/fff79lmaurq9ULtIsrMTFRhmFYvdS6pOsoL2rWrCmTyaTk5GS7tps9e7aaNWumH3/80Wq5PefVFvXr15fZbNbevXvt2u5OcXFxeR5O5o4eeO2112QYhtq3b295+Hnu3Dmr7VNTU3XlyhXVr18/z75zj12tWrWKFSOAvOgr7FdZ2nVbGYahSZMm6cCBA1q/fn2+I6Yk0f4DAAAADkDSCABgYTabNXHiRK1bt04rVqxQSkqKDhw4oLFjxyooKEijR4+2lA0JCdGVK1e0fv16ZWZm6uLFizp58mSefQYEBOjs2bM6ceKEUlNTLQ/2cnJydPXqVWVlZWn//v2KiopSgwYNNGLEiBKpY9OmTfL19dXcuXNL/kCVMi8vLwUHB+v06dN2bZc7nZGLi0ue5baeV1vrefbZZ7Vy5UrFxsYqJSVF2dnZOn36tOXBXkREhGrVqqU9e/bYte/8NGrUSA899JCWL1+ubdu2KT09XadOnbLE/dxzz+XZJvfYhYaGFrt+ANboK+xHu27tp59+0sKFC7V8+XK5ublZTYlnMpn01ltvSaL9BwAAAByBpBEAwMqMGTM0b948zZo1S9WrV1e3bt3UsGFDJSYmytvb21Ju3Lhxeuihh/TEE0+oadOmmj17tmUqmN+/nHrs2LGqWbOmWrRood69e+vKlSuSbr9rIDQ0VJ6enuratauaNGmib7/91up9D8Wtozzr06ePDh48aPUei88++0whISE6duyYOnTooJdffjnPdh07dlR0dHSe5bac19jYWC1ZskSS1Lp1ax0/flzLly/XxIkTJUm9evXSkSNHJEkxMTGaMGGCFixYoMDAQAUFBSkqKkpXr16VdHt6oKSkJG3YsKHYx8JkMikhIUERERF67rnn5O/vrxYtWui3337T2rVr1bVr1zzb7N69W3Xr1lXr1q2LXT+AvOgr7FdZ2vWdO3eqS5cuqlOnjnbt2qV9+/YpKChInTt31rZt2yTdHmlkC9p/AAAAoOyZjDvu2FevXq2hQ4fafCMPAHBuJpNJ8fHxGjJkiKNDsRgzZowSEhJ0+fJlR4eSr/DwcElSQkKCw2I4evSomjdvrri4OA0fPtxhcRRVTk6OunfvrhEjRmjkyJFlWvfly5dVr149zZkzx/Jg1FHK+u/PGf/e4fyc9f7f2fsKe//eaNdLX3Haf9pPAAAAQJKUwEgjAIBD2PMy8MooJCREs2bN0qxZs3T9+nVHh2OX7OxsrV+/XqmpqYqIiCjz+mfOnKm2bdsqMjKyzOsGULIqUl9Bu176aP8BAACA4iNpBACAk5oyZYrCw8MVERFh98vTHSkxMVFr167Vpk2b5OXlVaZ1L168WHv37tXGjRvl5uZWpnUDwN3Qrpce2n8AAACgZJA0AgCUqalTpyouLk7Jyclq1KiR1qxZ4+iQnNrcuXMVGRmpN99809Gh2KxHjx769NNPVbt27TKtd8OGDcrIyFBiYqL8/f3LtG4AJasi9xW06yWP9h8AAAAoOa6ODgAAULnMmzdP8+bNc3QY5UrPnj3Vs2dPR4fh9Pr376/+/fs7OgwAJaCi9xW06yWL9h8AAAAoOYw0AgAAAAAAAAAAAEkjAAAAAAAAAAAAkDQCAAAAAAAAAACASBoBAAAAAAAAAABAkmtBK1avXl2WcQAAiik7O1suLi75rtuxY0cZR1O+nT59WhJ9Icon/t4dr7D22BnlXjO0efbj7w0AAABARWMyDMP4/YLVq1dr6NChjooHAACgQomPj9eQIUPKpC6TyVQm9QBARVSW7TUAAADgpBLyJI0AAOXTxo0btWjRIiUmJqpt27aKjo5WRESE3NzcHB0aAFRov/zyi2JiYvTXv/5V7u7ueuGFFzR+/HjVqVPH0aEBAAAAAGAPkkYAUNHs3btXixcv1qpVqxQYGKjRo0crMjJSAQEBjg4NACqU7du3a+nSpVq3bp3uuecevfDCCxo9erT8/PwcHRoAAAAAAEVB0ggAKqpz587pz3/+s5YuXarMzEwNGzZMEydOVJMmTRwdGgCUW7du3dKGDRv09ttva9euXbr//vsVGRmpYcOGydW1wNeFAgAAAABQHiRUcXQEAIDSERQUpJkzZ+rkyZOaM2eONm/erObNm6tv3768uBsA7JScnKx33nlHjRs31hNPPKEaNWro+++/1w8//KCnn36ahBEAAAAAoEIgaQQAFZyPj4/Gjx+vX3/9VevXr9fFixfVqVMndenSRQkJCcrOznZ0iADgtI4eParx48erbt26ev311zVw4EAdP35cX3zxhcLCwhwdHgAAAAAAJYqkEQBUElWqVFHfvn21c+dOfffdd/L399fQoUPVtGlTvfPOO0pLS3N0iADgNLZv364hQ4aoWbNm+vLLLzV37lydPXtW77zzjho0aODo8AAAAAAAKBW80wgAKrEjR47ovffe0/Lly1W1alWNHDlSkZGRqlOnjqNDA4Ayl/u+orfeekv/7//9P3Xu3Fnjx4/XwIED5eLi4uis3RA1AAAgAElEQVTwAAAAAAAobQkkjQAASkpKUmxsrJYtW6bU1FQNGTJEkydPVosWLRwdGgCUuuTkZH3yySd66623dOHCBT3++OOKjo5Wx44dHR0aAAAAAABliaQRAOB/MjIyFB8frzfffFOHDx9Wjx49FBkZqb59+zo6NAAocUf/P/buNK6qqv////swHmZwSMl5LgNnr9S0MtMcQjPnMr9aKWomTjk1mQNpXZeSA1lqdpmmiHZBpTZY+TMrvTJnyjkTRxwBBWXa/xv9OVcnQA8IbJTX8/E4N1h77bU/a+1z9obzYa91+LDmzZunxYsXy8XFRQMHDtS4ceNUpUoVs0MDAAAAAMAM0axpBACwcXd314ABAxQXF6fY2FhJUteuXdWkSRMtW7ZMGRkZJkcIALfur+sVrVu3TuHh4bb1ikgYAQAAAABKM5JGAIAcnJycFBISoq+//lrbt29XUFCQnnvuOdWpU0ezZs3S5cuXzQ4RAPIlLS1Ny5YtU8OGDdWmTRudOnVKK1eu1IEDBxQWFiYvLy+zQwQAAAAAwHRMTwcAcMjvv/+u9957TwsXLlRWVpYGDRrENE4ASrxz587pgw8+0Lx583Tu3Dl169ZNY8eO1f333292aAAAAAAAlDSsaQQAyJ+kpCQtXbrUbsH4cePG6R//+IfZoQGAzaFDhzR//nwtXrxYrq6u+r//+z8S3QAAAAAA3BhrGgEA8sfX11dhYWE6cuSIFi9erP379+v+++9X69at9dlnn4n/RQBgpi1btigkJET16tWzrVd08uRJ1isCAAAAAMABJI0AAAXi5uamAQMGaM+ePfr+++8VEBCgbt26qV69enrnnXeUmppqdogASons9YoaNGigNm3a6NKlS4qKimK9IgAAAAAA8onp6QAAhWbPnj1asGCBli1bJl9fXw0bNkwvvviiypYta3ZoAO5ArFcEAAAAAEChYk0jAEDhO3PmjBYuXKh58+YpJSVFvXr10ssvv6x69eqZHRqAO0Bu6xW99NJLqly5stmhAQAAAABwOyNpBAAoOleuXNHHH3+sf/3rXzp8+LA6d+6siRMn6oEHHjA7NAC3oS1btmjWrFlat26datWqpREjRmjw4MHy9PQ0OzQAAAAAAO4E0axpBAAoMt7e3hoyZIh+++03xcTE6MKFC2rdurWaNWumZcuWKSMjw+wQAZRwea1XtH//foWFhZEwAgAAAACgEJE0AgAUOScnJ4WEhOjHH3/U999/r5o1a+rZZ59VvXr19M477+jq1atmhwighElISNCsWbNUo0YNDR48WPfcc4+2bdumLVu2qFevXnJ2djY7RAAAAAAA7jhMTwcAMMWRI0c0d+5cuzVJxo8fr0qVKpkdGgATHTx4UAsWLNCiRYvk5ubGekUAAAAAABQf1jQCAJjr3Llz+uCDDzR37lydP39effr00fjx4xUUFGR2aACKEesVAQAAAABgOtY0AgCYq3z58powYYKOHj2qRYsW6ZdfflFwcLBat26tzz77TPxvA3Dnun79upYtW6bg4GDbekWxsbE6ePAg6xUBAAAAAGACkkYAgBLB3d1dAwYM0L59+/T1118rICBAXbt2VePGjbVs2TKlp6ebHSKAQpK9XlHNmjU1ePBgNW7cWLt379aWLVsUEhIii8VidogAAAAAAJRKTE8HACixdu7cqTlz5mjlypUqV66cQkNDFRYWpoCAALNDA1AAf12vyNvbW88++6xefPFF1jIDAAAAAKBkYE0jAEDJd+zYMS1cuFDvvfeeMjMzNWjQII0ZM0bVqlUzOzQADvjrekW1a9fWCy+8wHpFAAAAAACUPKxpBAAo+apXr66ZM2fq+PHjmjZtmv7zn/+oZs2aCgkJ0datW80OD0AustcrCgoKsluv6MCBA6xXBAAAAABACUXSCABw2/Dx8VFYWJiOHDmiVatWKSEhQS1btlTr1q0VHR2tzMxMs0MESr2EhARNmTJFlStX1uDBg9WkSRPt2bOH9YoAAAAAALgNMD0dAOC29tdpr2rVqqURI0Yw7RVggj179mjBggX66KOPWK8IAAAAAIDbE2saAQDuDIcOHdL8+fO1aNEi2xfWYWFhCgwMNDs04I5lGIa++eYbvfPOO6xXBAAAAADA7Y81jQAAd4Y6deronXfe0bFjxzR8+HAtXrxYNWrU0IABA/Tbb7+ZHR5wR8leryg4OFjt27dnvSIAAAAAAO4QPGkEALgjXbt2TatXr9abb76pgwcPqnPnzgoLC9Ojjz5qdmjAbevs2bN69913tWDBAiUnJ6t3794aP368goKCzA4NAAAAAADcOp40AgDcmaxWqwYMGKC4uDjFxMTo0qVLat++vZo2baply5YpIyPD7BCB28bu3bsVGhqq6tWr691339Vzzz2no0ePatmyZSSMAAAAAAC4g/CkEQCg1Pjll1/0zjvvaOXKlapcubKGDh2q0NBQ+fv7mx0aUOL8fb2iOnXqaPjw4RoyZIg8PDzMDg8AAAAAABS+aJJGAIBS5+jRo3rnnXe0ZMkSOTs7a+DAgRo3bpyqVKlidmiA6a5fv66oqCjNmjVLv/76qx544AFNmDBBjz/+uCwWi9nhAQAAAACAokPSCABQeiUmJurDDz/U22+/rXPnzqlbt2566aWX1Lx5c7NDA4od6xUBAAAAAFDqkTQCACAtLU2rVq3S22+/rX379vFkBUqV3bt3KzIyUsuWLZOvr68GDRqkkSNH6u677zY7NAAAAAAAULyincyOAAAAs7m5uWnAgAHau3evvv/+ewUEBKhbt25q2LCh3n//fV27ds3htuLj44swUiBv58+fd7huVlaWNm7cqJCQEDVu3FibNm3SzJkzdezYMc2cOZOEEQAAAAAApRRJIwAA/qJ169b67LPPtHPnTjVq1EgjRoxQ9erVNWXKFF28ePGG+6alpalFixZasGBBMUUL/Om1115Tnz59blrv+vXrWrZsmYKDg9W+fXtdunRJsbGx2r9/v8LCwuTh4VEM0QIAAAAAgJKKpBEAALlo2LChli1bpuPHj2vo0KGaO3euqlWrptDQUB04cCDXfT7++GOdPn1aI0aM0KxZs4o5YpRGhmEoLCxM06ZN03fffae9e/fmWu/s2bOaMmWKKlWqpCFDhqhp06bat2+ftmzZopCQEKZhBAAAAAAAkiTWNAIAwAHJycn64IMPNGfOHMXHx6tz586aNGmSWrVqZatz3333af/+/crKypLFYtH48eM1c+ZME6PGnSwzM1NDhgzRhx9+qKysLLm5ualfv3768MMPbXV27dqld99917Ze0bBhwzRixAiVK1fOvMABAAAAAEBJFU3SCACAfMjKytK6desUHh6urVu3qmnTpho5cqTKlSunLl262NV1cnJSaGio5s+fLycnHu5F4UlLS1O/fv0UGxurzMxMW7mrq6uOHTumX3/9Ve+8844+//xzNWjQQC+88IKeeeYZpp8DAAAAAAA3QtIIAICC2rRpk/71r39p3bp18vHxUUpKijIyMuzqODk52Z7+cHFxMSlS3ElSUlL0xBNP6Ntvv7VLGEl/Jo3Kly+v06dPq3Pnzho9erTatWtnUqQAAAAAAOA2Q9IIAIBbFRsbqyeeeCLP7c7Ozurevbs+/vhjubq6FmNkuNMkJibqscce0y+//JIjQZnNy8tLW7ZsUaNGjYo5OgAAAAAAcJuLZq4cAABu0Zo1a26YDMrMzFRMTIy6du2qa9euFWNkuJNcvHhRbdu21Y4dO/JMGEnStWvX9PPPPxdjZAAAAAAA4E7Bk0YAANyCkydPqnr16jf8Ej+bi4uLWrRoofXr18vHx6cYosOd4vTp02rbtq2OHj2q9PT0G9a1WCyqUaOGDh8+LIvFUkwRAgAAAACAOwBPGgEAcCvmzZuXY12ZvGRkZGjr1q1q3769EhMTizgy3CkOHTqkZs2aOZQwkiTDMHT06FF9+eWXxRAdAAAAAAC4k5A0AgCggNLS0vT555/LxcUlxzZXV1e5u7vnmLYuIyND27Zt04MPPqjz588XV6i4Te3du1ctW7bU6dOncySMXFxc5O7uLjc3Nzk55fyVbuHChcUVJgAAAAAAuEMwPR1QRHr16qU1a9aYHQYAAADuUFFRUerdu7fZYQAAAAC4c0Tn/NdoAIWmRYsWGj16tNlhAChh0tPTlZSUpMTERLm6uqpKlSpmh4T/X58+fTRq1Ci1bNnS7FB09OhRubq6ysfHRz4+PnJ2djY7pFzNmTNHkrjfAcWsT58+ZocAAAAA4A5E0ggoQpUrV+a/PwHgNtKnTx+1bNmSa3c+REdHSxJjBhQzkkYAAAAAigJrGgEAAAAAAAAAAICkEQAAAAAAAAAAAEgaAQAAAAAAAAAAQCSNAAAAAAAAAAAAIJJGAAAAAAAAAAAAEEkjAACAQrd+/Xr5+fnps88+MzuUEmno0KGyWCy2V//+/XPU2bhxoyZNmqS1a9eqZs2atrrPPPNMjrodOnSQj4+PnJ2ddd9992nHjh3F0Y1blpWVpTlz5qhVq1a5bp86darq168vX19fubu7q3bt2ho/fryuXLmSo+7HH3+s5s2by8fHR9WqVdOgQYN05swZ2/ZPP/1Us2bNUmZmZqHEXhrOT7Zr167pnnvu0SuvvJJjW0HHPSYmxu4zUK5cuSLvBwAAAAA4gqQRAABAITMMw+wQSrwyZcpow4YNOnDggJYsWWK37fXXX9fcuXM1efJk9ejRQ0ePHlWtWrVUtmxZLV++XOvWrbOr/9VXXyk6OlohISGKi4tTkyZNirMrBXLo0CE9+OCDGjNmjFJSUnKt8+2332rEiBE6duyYzp8/r/DwcEVERKhXr1529aKiovT000+rV69eOnHihGJjY7V582Z16tRJGRkZkqSuXbvKarWqXbt2unz58i3FXhrOz1+9/PLLOnDgQI7yWxn3bt266cSJE9q8ebM6d+5cbH0BAAAAgJshaQQAAFDIunTposTERIWEhJgdilJTU/N8ksVMHh4e6tixo+rWrSt3d3db+cyZM7Vq1SqtXr1aPj4+dvvMnTtXTk5OCg0NVWJiYnGHXGh2796tiRMnatiwYWrUqFGe9by9vRUaGqoyZcrIx8dHvXv3Vvfu3fXFF18oPj7eVu+9997T3XffrZdeekl+fn5q1KiRxowZo127dmnbtm22emFhYWrYsKE6d+5sS2rkV2k4P3/1448/at++fbluu5Vxt1gsqlSpktq0aaM6deoUS18AAAAAwBEkjQAAAO5gS5YsUUJCgtlhOOTw4cN69dVX9cYbb8hqtebY3qpVK40aNUonT57UuHHjTIiwcDRs2FBr167V008/bZcw+7vPP/9czs7OdmXZ05j99emk+Ph4BQYGymKx2MqqVKkiSfrjjz/s9p8yZYp27dqliIiIfMddWs5PttTUVL300kt5jlVxjTsAAAAAFCeSRgAAAIVoy5Ytqlq1qiwWi+bPny9JioyMlJeXlzw9PRUbG6tOnTrJ19dXlStX1sqVK237zp07V1arVXfddZeGDh2qwMBAWa1WtWrVyu7JhZEjR8rNzU0VK1a0lb3wwgvy8vKSxWLR+fPnJUmjRo3S2LFjdeTIEVksFtWuXVuS9MUXX8jX11czZswojiFx2Ny5c2UYhrp27ZpnnenTp6tu3bpavHixNm7ceMP2DMPQ7Nmzde+998rd3V0BAQF64okntH//flsdR8+NJGVmZuq1115T1apV5eHhoQYNGigqKurWOp1PJ0+elIeHh2rUqGErq1mzZo7EYPa6OjVr1rQrDwgI0EMPPaSIiIh8T6NY2s7Pyy+/rBdeeEHly5fPdXtxjTsAAAAAFCeSRgAAAIWodevW+vHHH+3Khg8frtGjRys1NVU+Pj6KiorSkSNHVLNmTQ0ePFjp6emS/kwGDRw4UCkpKQoLC9OxY8e0Y8cOZWRkqH379rYpyebOnavevXvbHWPBggV644037MoiIiIUEhKiWrVqyTAMHT58WNKfX65LUlZWVpGMQUGtW7dO9erVk6enZ551PDw89OGHH8rJyUmDBw/W1atX86w7ZcoUTZo0SS+//LISEhK0efNmxcfHq02bNjp79qwkx8+NJE2cOFFvvfWW5syZo9OnTyskJERPPfWUtm/fXniDcAMpKSn69ttvNXjwYLm5udnKJ0+erDNnzmjevHlKTk5WXFycIiIi9Nhjj6lFixY52mncuLFOnjyp3bt35+v4pen8/PDDDzpy5IieeuqpPOsU17gDAAAAQHEiaQQAAFCMWrVqJV9fX5UvX159+/bV1atXdfz4cbs6Li4utqcv6tevr8jISCUnJ2vp0qWFEkOXLl2UlJSkV199tVDaKwxXr17V77//rlq1at20bsuWLTV69GgdO3ZMEydOzLVOamqqZs+erSeffFL9+/eXn5+fgoODtXDhQp0/f17vv/9+jn1udG6uXbumyMhIde/eXT169JC/v79eeeUVubq6Ftp5uZnw8HAFBgZq+vTpduUPPfSQJkyYoJEjR8rX11dBQUFKTk7W4sWLc20new2dvXv3Onzs0nR+UlNTNWrUKEVGRt6wXnGMOwAAAAAUN5JGAAAAJsl+WuSvT0vkplmzZvL09LSbtutOk5CQIMMwbvgUy19Nnz5d9erV04IFC7Rly5Yc2+Pi4nTlyhU1a9bMrrx58+Zyc3Ozm+4vN38/NwcOHFBKSoqCgoJsdTw8PFSxYsViOS+ffPKJVq9erS+//FI+Pj52215++WW9//77+uabb3TlyhUdPXpUrVq1UsuWLW1Pp/1V9hhnP83jiNJ0fiZPnqwhQ4aoUqVKN6xXHOMOAAAAAMWNpBEAAMBtwN3dXefOnTM7jCJz7do1SX/20xFWq1VLly6VxWLRs88+q9TUVLvtly9fliR5e3vn2Nff31/Jycn5ii97mrVXXnlFFovF9vrjjz+UkpKSr7bya9WqVZo5c6Y2bdqk6tWr2207ffq0Zs2apSFDhuiRRx6Rl5eXatSooUWLFunUqVN6++23c7Tn4eEh6X9j7ojScn62bNmivXv36vnnn79hveIadwAAAAAobiSNAAAASrj09HRdvnxZlStXNjuUIpP9hXr2ekuOaNmypcaMGaNDhw5p2rRpdtv8/f0lKdfkQ0HGsnz58pKkOXPmyDAMu9dPP/2Ur7byY968eVq+fLm+/fZb3X333Tm2Hzp0SJmZmTm2+fr6qkyZMoqLi8uxT1pamqT/jbkjSsv5WbJkib755hs5OTnZEk/Zbc+YMUMWi0Xbt28vtnEHAAAAgOJG0ggAAKCE27RpkwzDUIsWLWxlLi4uN53W7nZy1113yWKxKDExMV/7TZs2Tffcc4927txpVx4UFCRvb29t377drnzbtm1KS0tT06ZN83WcKlWqyGq1ateuXfnar6AMw9CECRO0d+9excTE5PpEjiRbcuX06dN25cnJybp48aKqVKmSY5/sMa5QoYLD8ZSW87N06dIcSafsJ/xefvllGYahZs2aFdu4AwAAAEBxI2kEAABQwmRlZenSpUvKyMjQnj17NGrUKFWtWlUDBw601aldu7YuXryomJgYpaen69y5c/rjjz9ytFWmTBmdOnVKx44dU3JystLT07Vhwwb5+vpqxowZxdirG/P09FTNmjV14sSJfO2XPQ2as7NzjvKxY8fqk08+0fLly5WUlKS9e/dq2LBhCgwMVGhoaL6PM2jQIK1cuVKRkZFKSkpSZmamTpw4YUsc9O3bVxUqVNCOHTvy1XZufv31V7311ltatGiRXF1d7aZcs1gs+uc//ylJqlGjhtq2batFixZp8+bNSk1NVXx8vK1/zz33XI62s8c4ODjY4bg5P/YKY9wBAAAAoCQiaQQAAFCI5s+fr+bNm0uSJkyYoG7duikyMlJz5syRJDVo0EBHjx7VokWLNHbsWElSx44ddejQIVsb165dU3BwsDw8PNSmTRvVrVtX3333nd16MsOHD1fbtm3Vr18/1atXT9OmTbNNe9WyZUvFx8dLkoYNG6a77rpL9evXV+fOnXXx4sViGYeC6NKli+Li4uzWv/nPf/6j2rVr68iRI2revLlefPHFHPu1aNFCY8aMyVH++uuvKzw8XFOnTlW5cuX00EMPqXr16tq0aZO8vLwkKV/nJiIiQqNHj9asWbNUtmxZBQYGatSoUbp06ZKkP6cfS0hIUGxs7A37uXXrVrVu3Vp33323tm3bpt27dyswMFAPPPCANm/eLOnPJ40cYbFYFB0drb59++q5555TQECA6tevr+PHj2vt2rVq06ZNjn1+/vlnVapUSQ0aNMhX3KXl/DiiMMYdAAAAAEoii+HoX6QA8qVXr16SpOjoaJMjAQA4ymKxKCoqSr179zYthqFDhyo6OloXLlwwLYb8KMj9bujQofr8889zPLVy+PBh3XvvvVq6dKn69+9fqHEWh6ysLD388MMaOHCgnn32WbPDydWFCxdUuXJlTZ8+3ZZ4cTRuzk/B5Tbu2UaNGqXly5fr/Pnz+WqzJFyvAAAAANxxonnSCAAAoITJzMw0O4Qil5qaqi+//FKHDh1SWlqapD+n3Js6daqmTp2qK1eumBxh/mRmZiomJkbJycnq27ev2eHkacqUKWrUqJFGjhwpKX9xc34K7u/jbhiGTp06pS1btujw4cPFHg8AAAAA5IWkEXCbGDRokKxWqywWi65du2Z2OAXy5ptvys/PTxaLpdgWEndEYY9t8+bN5ezsrEaNGhW4jfXr18vPz0+fffZZnnWef/55+fj4lLjxLIz+58XRPudVz5FxLW4HDhzQiy++qPvuu08+Pj5ycXGRn5+f6tatqy5duuinn34yO0SgSFy8eFEdO3ZU3bp17Z76mDRpknr16qW+ffsqMTHRxAjzZ9OmTVq7dq02bNggT09Ps8PJ1ezZs7Vr1y6tX79erq6ukvIfN+cn/3Ib99jYWFWqVElt2rTRunXrijUeAAAAALgRkkbAbWLp0qUaN26c2WHckkmTJum9994zO4wcCntsf/75Z7Vt2/aW2nBk5tDFixdr0aJFt3ScolAY/c+Lo33Oq15Jm5F1yZIlCg4O1p49ezR79mzFx8fr6tWr2rlzp6ZNm6bLly9r7969ZoeJYjR58mQtXbpUiYmJqlGjhtasWWN2SEVi4cKFMgzD9lq+fLnd9hkzZmjkyJF68803TYow/9q1a6cVK1aoYsWKZoeSq9jYWF2/fl2bNm1SQECArbwgcXN+HJfXuD/xxBN2n4H8Tk0HAAAAAEXFxewAANx+UlNT1a5dO/34449mh1KiWSyWAu/bpUuX2+o/uHNzK/0vKiVpXLdu3arQ0FA99NBD+vLLL+Xi8r9bcs2aNVWzZk35+/vbFngvicy8Ftyp16Hw8HCFh4ebHUaJ0KFDB3Xo0MHsMO4Y3bp1U7du3QqtPc6PYwp73AEAAACgqJE0Am5DZn8Zv2TJEiUkJJgaQ1EpzLHNnoKmKJn9XriRouq/o30ujrExDENr1qzRpUuXNGTIkHztO336dGVmZurNN9+0Sxj91WOPPabHHnusMEItEmZeC+7k6xAAAAAAAIBZmJ4OKGE++ugjNWvWTFarVV5eXqpevbqmTZtm2+7k5KR169apU6dO8vPzU2BgoD744AO7Nr7//nvVr19ffn5+slqtCg4O1pdffilJeuutt+Tp6SkfHx8lJCRo7NixqlSpkg4cOOBQfKNGjdLYsWN15MgRWSwW1a5dW9KfX57Pnj1b9957r9zd3RUQEKAnnnhC+/fvv2F7Z8+eVfXq1eXi4qKOHTvayjMzM/Xaa6+patWq8vDwUIMGDRQVFSVJioyMlJeXlzw9PRUbG6tOnTrJ19dXlStX1sqVKx3qR25uNrbPP/+8LBaLLBaLatWqpZ07d0r6c00kT09P+fn56dNPP7XVP3z4sO655x55eXnJw8NDbdq00ZYtW2zb8zoXS5YsUdWqVWWxWDR//nxbfcMw9Pbbb6tevXpyd3eXn5+fXnrppQL390ZjHBERIS8vLzk5Oalp06aqUKGCXF1d5eXlpSZNmqhNmzaqUqWKrFar/P39NX78+Bzt36z/N4shP312pN6WLVtyjGt+3kuZmZkKDw9XvXr15OHhoXLlyqlGjRoKDw9X7969bfW++OIL+fr6asaMGXmOfVpamr755huVLVtW//jHP/Ksl1s/b/Y5y+/n40bXnBtdS/K6FhTWZ7ewjw0AAAAAAAAHGACKRM+ePY2ePXvma585c+YYkow333zTuHDhgnHx4kXjvffeM55++mnDMAzj5ZdfNiQZ33zzjXH58mXj4sWLRufOnQ13d3fj6tWrtnaio6ONKVOmGBcvXjQuXLhgtGjRwihbtqxte3Y7YWFhxrx584wnn3zS+O233xyOs0ePHkatWrXsyl577TXDzc3N+Oijj4zLly8be/bsMZo0aWKUK1fOOHPmjK3eypUrDUnGzp07DcMwjLS0NKNHjx5GbGysXXvjxo0z3N3djTVr1hiXLl0yJk+ebDg5ORk///xzjrFITEw0EhISjDZt2hheXl5GWlqaw335+5jcbGx79OhhODs7GydPnrTb/6mnnjI+/fRT28/t2rUzatasafz+++9Genq6sW/fPuP+++83rFarcfDgwRzH/fu5iI+PNyQZ8+bNs6trsViMf/3rX8alS5eMlJQUY8GCBXbjmR83G+PXX3/dkGRs27bNuHr1qnH+/HmjY8eOhiRj3bp1xrlz54yrV68aI0eONCQZu3btynf/HTnPjvTZ0Xp5jasj76UZM2YYzs7ORmxsrJGSkmL88ssvRoUKFYyHH37Yblw///xzw8fHx5g6dWqeY3/w4EFDktGiRYt8nTNHP2eO9ulm15ybXUtyuxYU1me3KI7tCElGVFSUw/VRsPsdgFvH9QoAAABAEVhN0ggoIvn9Ei0tLc3w9/c32rZta1eekZFhREREGIbxvy9bUwIU57cAACAASURBVFNTbduXLVtmSDL27duXZ9vh4eGGJCMhISHPdvLj71/WpqSkGN7e3kbfvn3t6v33v/81JNl9ef7XpFF6errRr18/Y8OGDXb7paamGp6ennbtpaSkGO7u7sbw4cPz7EN2kuDw4cP57pOjY7tx40ZDkjF9+nRbWWJiolGnTh0jIyPDVtauXTujYcOGdsfYs2ePIckYN27cDY9rGDmTGykpKYanp6fRvn17u3p/T8I5ypExzk4aJScn2+r8+9//NiQZe/futZVln+dVq1blq/83i8HRPudnbG6UNLrZe6l58+bGP/7xD7tjDBkyxHBycjKuX79u5Mf27dsNScajjz7q8D75+Zw50idHrjl/9/dryd+vBUX52S2MYzuCL2Hzj6QRYA6uVwAAAACKwGrWNAJKiD179ujy5cs51i9xdnZWWFhYnvtlrxuTnp5+0zqZmZmFEGlOcXFxunLlipo1a2ZX3rx5c7m5uWnbtm059snMzNRTTz2lu+++225aOkk6cOCAUlJSFBQUZCvz8PBQxYoVbzjdnZubm6Qbj0V+5Da2jzzyiOrWrasPPvhAkydPlsVi0apVq9S3b185OzvfsL3g4GD5+flpz549+Y7l8OHDSklJUbt27fK9b25udYwzMjJsZY68B6Wc/b9ZDI72ubDHRsr9vXTt2jVZrVa7epmZmXJ1db3puf87b29vSVJKSorD+xTkc/ZXf+9TQa45N7uWFOVnt6iOnZuffvopX/VLuxMnTkiSVq9ebXIkAAAAAADgVpE0AkqIpKQkSZK/v/8tt7Vu3Tq9/fbbiouLU1JSUqElUfJy+fJlSf/7Ivyv/P39lZycnKN8xIgRunbtmj799FMNGTJE9evXt227evWqJOmVV17RK6+8YrdfYGBgYYaebxaLRUOHDtWYMWP0zTff6NFHH9WyZcu0YsUKh/Z3dXUt0PnI/lK2fPny+d43N2aN8V/7f7MYHO1zYY9NXjp37qy3335bsbGx6tChg+Li4hQTE6PHH38830mj6tWry2q16uDBgw7vU5DP2Y04cs3J77WkMN9XZh47IiJCERER+doHUp8+fcwOAQAAAAAA3CInswMA8Ke7775bknT+/Plbauf48ePq3r27KlasqG3btikxMVGzZs0qjBDzlP2lc25fWl++fFmVK1fOUd67d299/fXX8vf314ABA+yeXMn+8n/OnDkyDMPuVRKeABg4cKCsVqsWL16sAwcOyNfXV9WqVbvpfhkZGbp48aKqVq2a72NmP+Fy/fr1fO+bGzPG+O/9v1kMjva5sMcmL1OmTNEjjzyigQMHytfXV08++aR69+6tRYsW5bstd3d3PfbYYzp//rx++OGH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1LVrV/3+++9q166dYmJi5O/vXyj9AAAAAADkxJNGAAAAJURqamqeT27cTscorWbOnKlVq1Zp9erV8vHxsds2d+5cOTk5KTQ0VImJiSZFeOt2796tiRMnatiwYWrUqFGe9axWq5KSknI87RoaGqrx48fb6q1atUoxMTGKjo7W/fffLxcXFwUGBio2NlZBQUG2emFhYWrYsKE6d+6sjIyMIu0jAAAAAJRmJI0AAABKiCVLlighIeG2P0ZpdPjwYb366qt64403ZLVac2xv1aqVRo0apZMnT2rcuHEmRFg4GjZsqLVr1+rpp5+Wu7t7nvW++OKLHImz+Ph47du3T4888oit7N1331WTJk0UHBx802NPmTJFu3btUkRERME7AAAAAAC4IZJGAAAABWQYhmbPnq17771X7u7uCggI0BNPPKH9+/fb6owcOVJubm6qWLGireyFF16Ql5eXLBaLzp8/L0kaNWqUxo4dqyNHjshisah27dqaO3eurFar7rrrLg0dOlSBgYGyWq1q1aqVtm3bVijHkP78gt/X11czZswo0vG6k82dO1eGYahr16551pk+fbrq1q2rxYsXa+PGjTdsz5H3VmRkpLy8vOTp6anY2Fh16tRJvr6+qly5slauXGnXXmZmpl577TVVrVpVHh4eatCggaKiom6t0/k0c+ZMhYWF2X5OS0vT1q1bb/jE0l8FBATooYceUkREhAzDKKowAQAAAKBUI2kEAABQQFOmTNGkSZP08ssvKyEhQZs3b1Z8fLzatGmjs2fPSvozmdC7d2+7/RYsWKA33njDriwiIkIhISGqVauWDMPQ4cOHNXLkSA0cOFApKSkKCwvTsWPHtGPHDmVkZKh9+/aKj4+/5WNIfyYUJCkrK6vwBqeUWbdunerVqydPT88863h4eOjDDz+Uk5OTBg8erKtXr+ZZ15H31vDhwzV69GilpqbKx8dHUVFROnLkiGrWrKnBgwcrPT3d1t7EiRP11ltvac6cOTp9+rRCQkL01FNPafv27YU3CDdw8uRJbdq0ST169LCVnTp1Smlpafrll1/Utm1bW1L03nvv1YIFC3JNDDVu3FgnT57U7t27iyVuAAAAAChtSBoBAAAUQGpqqmbPnq0nn3xS/fv3l5+fn4KDg7Vw4UKdP39e77//fqEdy8XFxfbESf369RUZGank5GQtXbq0UNrv0qWLkpKS9OqrrxZKe6XN1atX9fvvv6tWrVo3rduyZUuNHj1ax44d08SJE3OtU5D3VqtWreTr66vy5curb9++unr1qo4fPy5JunbtmiIjI9W9e3f16NFD/v7+euWVV+Tq6lpo76GbmTlzpl588UU5Of3vz48rV65IksqXL68ZM2YoLi5OZ8+e1RNPPKERI0bo448/ztFOnTp1JEl79+4tlrgBAAAAoLQhaQQAAFAAcXFxunLlipo1a2ZX3rx5c7m5udlNH1fYmjVrJk9PT7upymCehIQEGYZxw6eM/mr69OmqV6+eFixYoC1btuTYfqvvLTc3N0myPWl04MABpaSkKCgoyFbHw8NDFStWLJb30KlTp/Tpp59q4MCBduXZayLdd999atWqlcqUKSM/Pz+98cYb8vPzyzU5lj3G2U9bAQAAAAAKF0kjAACAArh8+bIkydvbO8c2f39/JScnF+nx3d3dde7cuSI9Bhxz7do1Sf9LgtyM1WrV0qVLZbFY9Oyzzyo1NdVue2G/t7KnwXvllVdksVhsrz/++EMpKSn5aqsgZs2apcGDB8tqtdqVBwYGSpJtza1sbm5uqlatmo4cOZKjLQ8PD0n/G3MAAAAAQOEiaQQAAFAA/v7+kpTrF/iXL19W5cqVi+zY6enpRX4MOC47kZG9NpQjWrZsqTFjxujQoUOaNm2a3bbCfm+VL19ekjRnzhwZhmH3+umnn/LVVn6dOXNGH3/8sYYPH55jm7e3t+rUqaNff/01x7aMjAz5+fnlKE9LS5P0vzEHAAAAABQukkYAAAAFEBQUJG9vb23fvt2ufNu2bUpLS1PTpk1tZS4uLrapwgrDpk2bZBiGWrRoUWTHgOPuuusuWSwWJSYm5mu/adOm6Z577tHOnTvtyvPz3nJElSpVZLVatWvXrnztVxhmzZql/v37q0yZMrlu79Onj3bu3KmjR4/aylJSUvTHH38oODg4R/3sMa5QoULRBAwAAAAApRxJIwAAgAKwWq0aO3asPvnkEy1fvlxJSUnau3evhg0bpsDAQIWGhtrq1q5dWxcvXlRMTIzS09N17tw5/fHHHznaLFOmjE6dOqVjx44pOTnZlgTKysrSpUuXlJGRoT179mjUqFGqWrWq3Roxt3KMDRs2yNfXVzNmzCj8gSoFPD09VbNmTZ04cSJf+2VPU+fs7Jyj3NH3lqPHGTRokFauXKnIyEglJSUpMzNTJ06c0OnTpyVJffv2VYUKFbRjx458tX0jZ8+e1QcffKDRo0fnWWfMmDGqVq2aBg4cqOPHj+vChQuaMGGCUlNTNXHixBz1s8c4t4QSAAAAAODWkTQCAAAooNdff13h4eGaOnWqypUrp4ceekjVq1fXpk2b5OXlZas3fPhwtW3bVv369VO9evU0bdo02/RaLVu2VHx8vCRp2LBhuuuuu1S/fn117txZFy9elPTn+i3BwcHy8PBQmzZtVLduXX333Xd2a+jc6jFwa7p06aK4uDi79Yn+85//qHbt2jpy5IiaN2+uF198Mcd+LVq00JgxY3KUO/LeioyM1Jw5cyRJDRo00NGjR7Vo0SKNHTtWktSxY0cdOnRIkhQREaHRo0dr1qxZKlu2rAIDAzVq1ChdunRJ0p/TviUkJCg2NvaG/dy6datat26tu+++W9u2bdPu3bsVGBioBx54QJs3b7ar+9Zbb6lr166qWrVqnu0FBATo+++/V+XKldWoUSNVqlRJ//3vf7Vu3To1atQoR/2ff/5ZlSpVUoMGDW4YJwAAAACgYCyGYRhmBwHciXr16iVJio6ONjkSAICjLBaLoqKi1Lt3b7NDsRk6dKiio6N14cIFs0PJFfe7Px0+fFj33nuvli5dqv79+5sdTr5lZWXp4Ycf1sCBA/Xss8+aHU6uLly4oMqVK2v69Om2xFhpVhKvVwAAAABue9E8aQQAAFDCZWZmmh0CbqJ27dqaOnWqpk6dqitXrpgdTr5kZmYqJiZGycnJ6tu3r9nh5GnKlClq1KiRRo4caXYoAAAAAHDHImkEAAAAFIJJkyapV69e6tu3rxITE80Ox2GbNm3S2rVrtWHDBnl6epodTq5mz56tXbt2af369XJ1dTU7HAAAAAC4Y5E0AgAAKKEmT56spUuXKjExUTVq1NCaNWvMDgk3MWPGDI0cOVJvvvmm2aE4rF27dlqxYoUqVqxodii5io2N1fXr17Vp0yYFBASYHQ4AAAAA3NFczA4AAAAAuQsPD1d4eLjZYSCfOnTooA4dOpgdxh2jW7du6tatm9lhAAAAAECpwJNGAAAAAAAAAAAAIGkEAAAAAAAAAAAAkkYAAAAAAAAAAAAQSSMAAAAAAAAAAABIcjE7AOBOtnXrVvXq1cvsMAAA+TBnzhxFR0ebHcZtY+vWrZLE/Q4AAAAAgDsASSOgiLRs2dLsEADgtnHmzBnt3LlTnTp1MjWOnj17mnr821GLFi3MDgEolXr27KkqVaqYHQYAAACAO4zFMAzD7CAAAEDptnr1avXp00f8WgIAAAAAAGCaaNY0AgAAAAAAAAAAgEgaAQAAAAAAAAAAgKQRAAAAAAAAAAAASBoBAAAAAAAAAABAJI0AAAAAAAAAAAAgkkYAAAAAAAAAAAAQSSMAAAAAAAAAAACIpBEAAAAAAAAAAABE0ggAAAAAAAAAAAAiaQQAAAAAAAAAAACRNAIAAAAAAAAAAIBIGgEAAAAAAAAAAEAkjQAAAAAAAAAAACCSRgAAAAAAAAAAABBJIwAAAAAAAAAAAIikEQAAAAAAAAAAAETSCAAAAAAAAAAAACJpBAAAAAAAAAAAAJE0AgAAAAAAAAAAgEgaAQAAAAAAAAAAQCSNAAAAAAAAAAAAIJJGAAAAAAAAAAAAEEkjAAAAAAAAAAAAiKQRAAAAAAAAAAAARNIIAAAAAAAAAAAAImkEAAAAAAAAAAAAkTQCAAAAAAAAAACASBoBAAAAAAAAAABAJI0AAAAAAAAAAAAgkkYAAAAAAAAAAAAQSSMAAAAAAAAAAACIpBEAAAAAAAAAAAAkuZgdAAAAKF3S09N15coVu7KrV69Kki5dumRXbrFY5O/vX2yxAQAAAAAAlGYkjQAAQLG6ePGiKlWqpMzMzBzbypQpY/dz27Zt9e233xZXaAAAAAAAAKUa09MBAIBiVaFCBT344INycrrxryEWi0X9+vUrpqgAAAAAAABA0ggAABS7Z5555qZ1nJ2d9eSTTxZDNAAAAAAAAJBIGgEAABP06NFDLi55z5Lr7Oysjh07qmzZssUYFQAAAAAAQOlG0ggAABQ7X19fderUKc/EkWEY6t+/fzFHBQAAAAAAULqRNAIAAKbo37+/MjMzc93m5uamxx9/vJgjAgAAAAAAKN1IGgEAAFM8/vjj8vT0zFHu6uqq7t27y8vLy4SoAAAAAAAASi+SRgAAwBRWq1VPPvmkXF1d7crT09P19NNPmxQVAAAAAABA6UXSCAAAmOapp55Senq6XZmvr6/at29vUkQAAAAAAAClF0kjAABgmkcffVRlypSx/ezq6qp+/frJzc3NxKgAAAAAAABKJ5JGAADANC4uLurXr59tirr09HQ99dRTJkcFAAAAAABQOpE0AgAApurXr59tiroKFSqodevWJkcEAAAAAABQOpE0AgAApmrVqpUqVaokSRowYICcnPj1BAAAAAAAwAwuZgcAACgaq1evNjsEwGHNmzfXyZMnVbZsWd67uG1UqVJFLVu2LJK2f/rpJ8XHxxdJ2wAA3Em4HwMAUHC9e/fOUWYxDMMwIRYAQBGzWCxmhwAAd7SePXsqOjq6SNru1auX1qxZUyRtAwBwJ+F+DABAweWSHormSSMAuINFRUXl+h8DwK2yWCyF/v5as2aNevbsWWjtlTS9evWSpCL7UgPFK/t8FqWi/BIMwO2L+0n+rV69Wn369MntSxHc5rgfA8gP7gcFUxR//8N82Z+H3LBoAAAAKBHu5IQRAAAAAADA7YCkEQAAAAAAAAAAAEgaAQAAAAAAAAAAgKQRAAAAAAAAAAAARNIIAAAAAAAAAAAAImkEAAAAAAAAAAAAkTQCAAAmWr9+vfz8/PTZZ5+ZHUqJt3HjRk2aNElr165VzZo1ZbFYZLFY9Mwzz+So26FDB/n4+MjZ2Vn33XefduzYYULE+ZeVlaU5c+aoVatWuW5/+OGHbf3++8vb29uubnp6usLDw1W7dm25ubnJ399fQUFBOnbsmCTp008/1axZs5SZmVnU3QKAEol78I0NHTrU7j7Tv3//HHW4N0vTp0/P9b4cFBRkq5PXPTcmJsZun3LlyhVpXwCgsHAPvbHSfg+dOnWq6tevL19fX7m7u6t27doaP368rly5kqPuli1b9MADD8jT01OBgYGaMGGCrl+/bttu1j2UpBEAADCNYRhmh3BbeP311zV37lxNnjxZPXr00NGjR1WrVi2VLVtWy5cv17p16+zqf/XVV4qOjlZISIji4uLUpEkTkyJ33KFDh/Tggw9qzJgxSklJyff+rVu3tvu5T58+WrZsmVasWKGUlBT99ttvqlWrlu0X9a5du8pqtapdu3a6fPlyofQBAG4n3INvrkyZMtqwYYMOHDigJUuW2G3j3uy4vO653bp104kTJ7R582Z17ty5MEIGgGLBPfTmSvM99Ntvv9WIESN07NgxnT9/XuHh4YqIiFCvXr3s6sXFxalDhw5q166dzp07p08++UQffPCBhg0bZqtj1j2UpBEAADBNly5dlJiYqJCQELNDUWpqap7/RWummTNnatWqVVq9erV8fHzsts2dO1dOTk4KDQ1VYmKiSRHeut27d2vixIkaNmyYGjVqlGc9q9WqpKQkGYZh9woNDdX48eNt9VatWqWYmBhFR0fr/vvvl4uLiwIDAxUbG2v3n89hYWFq2LChOnfurIyMjCLtIwCUNNyDb87Dw0MdO3ZU3bp15e7ubivn3mzvo48+ynFv3rdvn12d3O65FotFlSpVUps2bVSnTp0i6wsAFDbuoTdXmu+h3t7eCg0NVZkyZeTj46PevXure/fu+uKLLxQfH2+rN23aNFWsWFFvvPGGvLy81LJlS02YMEEffvih9u/fb6tnxj2UpBEAAICkJUuWKCEhweww7Bw+fFivvvqq3njjDVmt1hzbW7VqpVGjRunkyZMaN26cCREWjoYNG2rt2rV6+umn7f6g+Lsvvvgixx8W8fHx2rdvnx555BFb2bvvvqsmTZooODj4pseeMmWKdu3apYiIiIJ3AABwS0riPTgv3JsLjnsuABQ+7qElz+effy5nZ2e7suzp47Kf3M3IyNC6dev00EMPyWKx2Op16tRJhmEoNjbWbv/ivoeSNAIAAKbYsmWLqlatKovFovnz5/9/7N15XFT1/j/w17AMM8MOLowiipDmgltaiI7L13vN5WoqLlR2I7/5QKwUsBtquAu5XfFSUA/N6FGW4nbFIrNH10i9V7yWa1iKGOKSgimyy/b5/dGP+ToOywwMnJnh9Xw8+INzPuec9zkzc15z5nMWAEBSUhIcHR2hUqmQmpqK8ePHw8XFBd7e3ti5c6d22oSEBCgUCnTo0AHz5s2DWq2GQqFAUFAQTp48qW23YMECyOVyeHl5aYe99tprcHR0hEwmw927dwEAERERWLRoEbKzsyGTyeDv7w/gj04KFxcXxMbGtsYm0ZOQkAAhBCZPnlxvm7Vr16JHjx748MMP8e233zY4PyEENm/ejF69esHBwQHu7u6YMmWKzllMhr4GAFBdXY3ly5fDx8cHSqUS/fr1Q0pKSvNW2kjr1q3DwoULtf9XVFQgIyOj0bOia7m7u2PkyJHYsmULbzNBRG0GM7jpmM1Nx8wlImvADG26tpyhN2/ehFKphK+vLwDg6tWrKC4uho+Pj047Pz8/AMD58+d1hrd2hrLTiIiIiCQxfPhw/Oc//9EZNn/+fERGRqKsrAzOzs5ISUlBdnY2unfvjrlz56KyshLAH1+iNlIDrwAAIABJREFUQ0NDUVpaioULFyInJwenT59GVVUV/vznP2sv+U5ISMDMmTN1lpGYmIhVq1bpDNuyZQsmTZoEPz8/CCFw5coVANA+bLKmpqZFtkFj0tLS0LNnT6hUqnrbKJVKfPzxx7CxscHcuXNRUlJSb9uVK1diyZIlePvtt5GXl4ejR4/i+vXr0Gg0uHPnDgDDXwMAWLx4MTZs2ID4+Hj89ttvmDRpEl544QX88MMPptsIDbh58ybS09MRHBysHXbr1i1UVFTgxx9/xOjRo7UHYr169UJiYmKdX7AHDhyImzdv4ty5c61SNxGR1JjBTcds1rdkyRK4u7tDLpfD19cXU6ZMwalTp+psy8wlIkvHDG26tpqhpaWlOHLkCObOnQu5XA4AuH37NgDo3UlDoVBAqVRq639Ua2YoO42IiIjILAUFBcHFxQXt27dHSEgISkpKkJubq9PGzs5Oe1ZR7969kZSUhKKiIiQnJ5ukhokTJ6KwsBDLli0zyfyMUVJSgl9//VV7plFDhg4disjISOTk5GDx4sV1tikrK8PmzZsxbdo0zJ49G66urggICMAHH3yAu3fvYuvWrXrTNPQalJeXIykpCVOnTkVwcDDc3NwQExMDe3t7k23/xqxbtw5vvPEGbGz+7yttcXExAKB9+/aIjY1FZmYm7ty5gylTpuD111/H559/rjef2ntAX7hwoVXqJiIyd209g+vDbNb38ssv4+DBg7h+/TqKi4uxc+dO5ObmYuTIkcjMzNRrz8wlImvHDK1bW87QuLg4qNVqrF27Vjvs4cOHAKB3GzsAsLe3R1lZmd7w1sxQdhoRERGR2as9G+fRs4DqMnjwYKhUKp3L0S1VXl4ehBANnoX1qLVr16Jnz55ITEzE8ePH9cZnZmaiuLgYgwcP1hk+ZMgQyOVyndsh1OXx1+DSpUsoLS1F3759tW2USiW8vLxaZfvfunULBw8eRGhoqM7w2ucu9OnTB0FBQfDw8ICrqytWrVoFV1fXOg8eardxXWdzERG1dW0xg+vDbNbXpUsXDBw4EE5OTpDL5QgMDERycjLKysqQmJio156ZS0RtCTP0/7TVDN2/fz92796Nw4cP61xVVPtMp6qqKr1pKioqoFQq9Ya3Zoay04iIiIisioODA/Lz86Uuo9nKy8sBwOCHTysUCiQnJ0Mmk2HOnDl6ZyYVFBQAAJycnPSmdXNzQ1FRkVH11d4mICYmBjKZTPt37do17cM9W9L69esxd+5cvQeoqtVqANDe57uWXC5H165dkZ2drTev2i/ktduciIiaxloyuD7MZsMEBATA1tYWly9f1hvHzCUiqhszVJc1ZOiuXbuwbt06pKeno1u3bjrjap9XVVhYqDO8tLQU5eXl2uPaR7VmhrLTiIiIiKxGZWUlCgoK4O3tLXUpzVb7hbD2ftSGGDp0KKKiopCVlYU1a9bojHNzcwOAOr88N2WbtW/fHgAQHx8PIYTO34kTJ4yal7Fu376Nzz//HPPnz9cb5+TkhCeeeAIXL17UG1dVVQVXV1e94RUVFQBQ59lcRERkGGvK4Powmw1TU1ODmpqaOn8YZOYSEeljhtbNkjP03XffxY4dO3DkyBF06tRJb7yvry+cnZ1x7do1neG1z6Xq16+f3jStmaHsNCIiIiKrkZ6eDiEEAgMDtcPs7OwavR2AOerQoQNkMhkePHhg1HRr1qzBk08+iTNnzugM79u3L5ycnPQe4nny5ElUVFTgqaeeMmo5Xbp0gUKhwNmzZ42azhTWr1+P2bNnw8PDo87xs2bNwpkzZ3D16lXtsNLSUly7dg0BAQF67Wu3cceOHVumYCKiNsCaMrg+zGZ9zz77rN6wU6dOQQiBoUOH6o1j5hIR6WOG1s/SMlQIgejoaFy4cAEHDhyo80oo4I/Xd8KECTh69Chqamq0ww8dOgSZTIbJkyfrTdOaGcpOIyIiIrJYNTU1uH//PqqqqnD+/HlERETAx8dH5zk3/v7+uHfvHg4cOIDKykrk5+frnc0DAB4eHrh16xZycnJQVFSEyspKHDp0CC4uLoiNjW3FtfqDSqVC9+7dcePGDaOmq72M//EHaioUCixatAj79+/Hjh07UFhYiAsXLiA8PBxqtRphYWFGL+eVV17Bzp07kZSUhMLCQlRXV+PGjRv47bffAAAhISHo2LEjTp8+bdS8G3Lnzh189NFHiIyMrLdNVFQUunbtitDQUOTm5uL3339HdHQ0ysrK6nyQau02rqtDiYiI6mbNGVwfZrO+mzdvYteuXSgoKEBlZSVOnDiBV199FT4+PggPD9drz8wlImKGGsPSMvTixYvYsGEDtm3bBnt7e51b3clkMmzatEnbdtmyZbhz5w5WrFiBkpISnDhxAhs3bkRoaCh69uypN+/WzFB2GhEREZEk3nvvPQwZMgQAEB0djeeeew5JSUmIj48H8Mfl2FevXsW2bduwaNEiAMC4ceOQlZWlnUd5eTkCAgKgVCqh0WjQo0cPfPfddzq3Q5k/fz5Gjx6N559/Hj179sSaNWu0l3MPHToU169fBwCEh4ejQ4cO6N27NyZMmIB79+61ynZoyMSJE5GZmalz/+Z//vOf8Pf3R3Z2NoYMGYI33nhDb7rAwEBERUXpDV+xYgXi4uKwevVqtGvXDiNHjkS3bt2Qnp4OR0dHADDqNdiyZQsiIyOxfv16eHp6Qq1WIyIiAvfv3wfwx+XzeXl5SE1NbXA9MzIyMHz4cHTq1AknT57EuXPnoFarMWzYMBw9elSn7YYNGzB58mT4+PjUOz93d3ccO3YM3t7eGDBgADp37oz//ve/SEtLw4ABA/Tanzp1Cp07d67zFgBERNaIGdx0zGbdbB43bhxiYmLg7e0NlUqFmTNnYtiwYcjIyICnp6fefJm5RGTpmKFN1xYyVAhh8Pbo06cPDh8+jG+++Qaenp4IDg7GnDlz8P7779fZvlUzVBARkVUCIFJSUqQug6yUOby/wsLChIeHh6Q1GGP69Oli+vTpRk2TlZUl7OzsxKefftpCVbWs6upqodFoxPbt26UupV53794VCoVCbNq0yajpmvJ6mtP8ichymcP+wdIyOCUlRRj780dYWJjo3Lmz3nBmc9M1lLkLFy4Unp6eRs+TeUxExmhKHpiapWWoEMYf/zNDTa8lMrSBz8NuXmlEREREFsuYh2haIn9/f6xevRqrV69GcXGx1OUYpbq6GgcOHEBRURFCQkKkLqdeK1euxIABA7BgwQKpSyEisijWnsEAUFZWhsOHDyMrK0v78Glmc9M9nrlCCNy6dQvHjx/XPvibiKgtYIYyQ43V2hnKTiMiIqrTq6++CmdnZ8hkMkkedG9KNTU1iI+PR1BQUL1tjh8/jmHDhkGlUkGtViM6OhoPHz40eln79u1D9+7d9e5bK5fL0aFDB4waNQobN27UXt5M1JglS5ZgxowZCAkJMfqhoVJKT0/Hvn37cOjQIahUKqnLqdPmzZtx9uxZfPXVV7C3t5e6nGbZtGmT9uGyH3zwgXb4V199BVdXV3zxxRcSVmcehgwZAltb2zpvUdjarOF1ycjIQK9evWBjYwOZTIaOHTti7dq1Upel4/FM9vLywuzZs6UuiyzIvXv3MG7cOPTo0QNz5szRDmc2G6+uzE1NTUXnzp2h0WiQlpbWqvVYi/ryvznTmntGmXt9hmCGUlvADDUdKTKUnUZERFSnDz/8ENu2bZO6jGbLysrCiBEjEBUVhdLS0jrbZGZmYuzYsRgzZgzy8/Oxf/9+fPTRR3U+vLcxwcHBuHr1Kvz8/ODq6gohBGpqapCXl4fdu3fD19cX0dHR6NOnD3744Yfmrl6btXTpUiQnJ+PBgwfw9fXF3r17pS6pRcXGxmLBggV45513pC7FYGPGjMFnn30GLy8vqUupU2pqKh4+fIj09HS4u7tLXU6zvfnmm/jPf/6jN1wYcU9ta3fq1CmMHj1a6jIAWMfrEhgYiJ9//hljx44FAFy6dAkxMTESV6Xr8Uy+ffs2duzYIXVZFq+tZPAHH3wAIYT27/H3DrPZcPVl7pQpU3S28d27d1u1LmtQX/43Z1pzzyhzr88QzNC2ixn6B2ao4aTKUDuTzo2IiMiMnDt3DqtXr0Z4eDhKSkrqPcBYs2YNvLy8sGrVKshkMgwdOhTR0dF466238NZbb+HJJ59sVh0ymQxubm4YNWoURo0ahYkTJ2LWrFmYOHEiLl++DFdX12bNvy2Ki4tDXFyc1GW0qrFjx2oPLKn5nnvuOTz33HNSl9HiJk6caFFn8LUGmUwmdQlm9bqUlZVhzJgxTf7R0ZxY07qYs7aYwfVhNhumrWRurebsi8xhP2ZOGVUXc6rPHF4vU7GmdTFnzND/www1jFQZyiuNiIioXubww1pz9O/fH/v27cOLL74IBweHOttUVVUhLS0NI0eO1Fnf8ePHQwiB1NRUk9c1ffp0hIaGIi8vz+jbSBARUfNY+q0ITW379u3Iy8uTugyTsKZ1ISLL1Zx9EfdjlsWaXi9rWhciaj52GhEREYA/LvPfuHEjevbsCQcHB7i6uuJvf/ubXrvq6mosX74cPj4+UCqV6NevH1JSUgAASUlJcHR0hEqlQmpqKsaPHw8XFxd4e3tj586dOvP5/vvv8fTTT0OlUsHFxQUBAQEoLCxsdBmmdvXqVRQXF8PHx0dnuJ+fHwDg/Pnz2mFff/01XFxcEBsb2+zlhoaGAgAOHTqkHWZt25aIpHX8+HH4+PhAJpPhvffeA2DcvsQU+wtDl7dgwQLI5XKd2z289tprcHR0hEwm095uYcuWLXB0dISNjQ2eeuopdOzYEfb29nB0dMSgQYOg0WjQpUsXKBQKuLm54a233tKr6cqVK3jyySfh6OgIpVIJjUaD48ePG7zuGzZsgEqlgrOzM/Ly8rBo0SJ07twZly5dMmibNOd1SUhIgEKhQIcOHTBv3jyo1WooFAoEBQXh5MmTRm/PiIgILFq0CNnZ2ZDJZPD39wfQvLwzt3Ux1rFjx9C7d2+4urpCoVAgICAAhw8fBvDH8x5rn+3g5+eHM2fOAABeeeUVqFQquLq64uDBgwBa9j1EROarvn2REAKbN29Gr1694ODgAHd3d0yZMgW//PJLo9M2tF8ytZb+7tDQcUpL18cMNX5djMUMJbIigoiIrBIAkZKSYnD7t99+W8hkMvH3v/9d3L9/X5SWlorExEQBQJw5c0bb7s033xQODg5i79694v79+2Lp0qXCxsZGnDp1SjsfAOJf//qXePDggcjLyxMajUY4OjqKiooKIYQQxcXFwsXFRaxfv16UlZWJ27dvi2nTpon8/HyDltEUzzzzjOjfv7/e8O+//14AEBs3btQbp1QqxZgxY7T/f/nll8LZ2VmsXr260eX5+fkJV1fXescXFhYKAKJLly7aYZa0bY19f5EQ06dPF9OnT5e6DDKRln49mzL/rKwsAUC8//772mHXr18XAMS7776rHWbIvkQI0+0vDF3eiy++KDp27Kgz7caNGwUA7T5MCCFWrFghAIiTJ0+KkpIScffuXTFu3DgBQKSlpYn8/HxRUlIiFixYIACIs2fPaqcdM2aM6N69u/j1119FZWWl+Omnn8QzzzwjFAqFuHz5ssHrXrtOCxcuFO+++66YNm2a+Pnnnw3eJs15XcLCwoSjo6O4ePGiKC8vF5mZmWLIkCHC2dlZ5ObmGr09g4ODhZ+fn047Y/Lu2WefFQDE/fv3zXJdhGg8kx+1Z88esXLlSnHv3j3x+++/i8DAQOHp6amzDFtbW3Hz5k2d6V544QVx8OBB7f8t+R5inhgvJSVF8OcP62SOeVzXvmj58uVCLpeLTz/9VBQUFIjz58+LQYMGiXbt2onbt283OG1j+6W68t9QrfndobHjFEMxQ1tvXYSwvgxlHjQNj/+tUwOfh9280oiIiFBWVob4+Hj86U9/QlRUFNzc3KBUKuHh4aHTrry8HElJSZg6dSqCg4Ph5uaGmJgY2NvbIzk5WadtUFAQXFxc0L59e4SEhKCkpAS5ubkAgJycHBQWFqJPnz5QKBTo2LEj9u3bh3bt2hm1DFN4+PAhAMDW1lZvnL29PcrKyrT/T5w4EYWFhVi2bFmzl+vs7AyZTIaioiIA1rltici8NbQvaYn9RUPLa4revXtDpVLB09MTzz//PADAx8cH7dq1g0qlwuzZswFA5yxu4I/9b7du3WBnZ4c+ffpg27ZtKC8vx9atW41e93Xr1uH111/Hvn37mv38u1qGbCc7Ozvt2eq9e/dGUlISioqKTLYvN1XemcO6GGv69OlYsWIF3N3d4eHhgcmTJ+P3339Hfn4+ACA8PBzV1dU69RUWFuLUqVOYMGECAOnfQ0RkXsrKyrB582ZMmzYNs2fPhqurKwICAvDBBx/g7t272vypT2P7pdbUnO8ODR2ntEZ9tZihLYcZSmQ97KQugIiIpHflyhWUlpZizJgxDba7dOkSSktL0bdvX+0wpVIJLy8vvR/lHiWXywEAlZWVAIDu3bujQ4cOmD17NhYuXIjQ0FB069atWctoKoVCAeCPZxs9rqKiAkql0uTLBICSkhIIIeDi4gLAMrdtfHw89uzZY/R0bVVGRgYAYMaMGRJXQqaQkZGBwMBAqcswmcf3JS29L358eaaa36P78tpnFzW2jICAALi6umpvR9raOdQQQ7fT4MGDoVKpWr0+Y1jqutS+j6qrqwEA//M//4MePXrgo48+wtKlSyGTybBr1y6EhIRoT0BpjfdQRkYG88QIN27cAMAMtkaWkMeZmZkoLi7G4MGDdYYPGTIEcrlc53Zihnh8vyQVY787NHSc0hr11cfccqculrou5pqhAPOgKXj8b31qvx/VhVcaERGRNijat2/fYLuSkhIAQExMjPZ+xDKZDNeuXUNpaanBy1MqlThy5AiGDx+O2NhYdO/eHSEhISgrKzPZMgxVe3/nx++lXVpaivLycqjVapMvEwAuX74MANozoqxx2xKR5Wpr+wt7e3vtDzGWuu4ODg6SnHXeEqRcl7S0NIwaNQrt27eHg4OD3nOxZDIZ5s2bh6tXr+Jf//oXAOCTTz7B//7v/2rbWOp7iIhaRkFBAQDAyclJb5ybm5v2zgP1aWy/ZC4a2/c1dJwiNWaoaTBDiawHrzQiIiLt1Ta1t2qrT22nUnx8PCIiIpq1zD59+uCLL75Afn4+Nm/ejHXr1qFPnz4ICQkx2TIM4evrC2dnZ1y7dk1n+JUrVwAA/fr1a5Hlfv311wCA8ePHA7DMbRsZGYmZM2c2ez5tRe3ZbDw7yzpY+9mJptwnmbuqqircu3cPPj4+ACxz3SsrK1FQUABvb2+pS2m21l6Xo0eP4scff0RkZCRyc3MxdepUTJs2DR999BE6deqEd999V+9Hr9DQUCxduhQffvghunTpAhcXF3Tt2lU7vjXeQ4GBgcwTI+zevRuzZs3iNrNClpDHbm5uAFBn51Bj+ztD90vmwJB9X33HKaa4/XdTMUObzlIzFOAxmbFkMhmP/61Q7fejuvBKIyIiQt++fWFjY4Pvv/++wXZdunSBQqHA2bNnm7W8W7du4eLFiwD++FL4zjvvYNCgQbh48aLJlmEoOzs7TJgwAUePHkVNTY12+KFDhyCTyTB58mSTL/P27duIj4+Ht7c35syZA8A6ty0RWS4p9hd2dnYmu12dMb777jvU1NRg0KBBAKRZ9+ZKT0+HEELnFk1Sbc/mau11+fHHH+Ho6AgAuHDhAiorKzF//nx0794dCoUCMplMbxp3d3fMmjULBw4cwKZNmzB37lyd8Zb4HiKiltO3b184OTnhhx9+0Bl+8uRJVFRU4Kmnnqp3WkP3S+agsX1fQ8cpUmKGNh0zlMh6sdOIiIjQvn17BAcHY+/evdi+fTsKCwtx/vx5vYeyKhQKvPLKK9i5cyeSkpJQWFiI6upq3LhxA7/99pvBy7t16xbmzZuHX375BRUVFThz5gyuXbuGwMBAky3DGMuWLcOdO3ewYsUKlJSU4MSJE9i4cSNCQ0PRs2dPbbtDhw7BxcUFsbGxBs1XCIHi4mLU1NRACIH8/HykpKRg2LBhsLW1xYEDB7TPNLLWbUtElkmK/YW/vz/u3buHAwcOoLKyEvn5+XpXgZpCRUUFHjx4gKqqKpw+fRoLFixA165dERoaCkCadTdWTU0N7t+/j6qqKpw/fx4RERHw8fHRrgNg+Pb08PDArVu3kJOTg6KiIlRWVhqdd+a8LvWprKzEnTt3kJ6erv3Bq/Zqs2+//Rbl5eXIysqq91kj4eHhePjwIb788ktMmjRJZ5wlvIeIqOU8vi+ytbXFokWLsH//fuzYsQOFhYW4cOECwsPDoVarERYWVu+0tbfKNmS/JLXG9n0NHae0JmYoM5SIDCCIiMgqARApKSkGty8qKhKvvvqq8PT0FE5OTmL48OFi+fLlAoDw9vYW586dE0II8fDhQxEdHS18fHyEnZ2daN++vQgODhaZmZkiMTFRqFQqAUA88cQTIjs7W2zdulW4uLgIAKJr167i8uXLIicnRwQFBQl3d3dha2srOnXqJN5++21RVVXV6DKMceLECTFs2DChVqsFAAFAeHl5iaCgIPH999/rtP3+++/F008/LRwcHIRarRZ/+9vfRHl5uU6br776Sjg7O4u1a9fWu8yDBw+Kfv36CZVKJeRyubCxsREAhEwmE25ubuLpp58Wq1evFr///rvetJa0bY19f5EQ06dPF9OnT5e6DDKRln49jZ3/3//+d9GxY0cBQDg6Oopp06aJd999V3h5eQkAQqVSicmTJxu8LxHCNPsLY5b3+++/i9GjRwuFQiF8fX3FG2+8If72t78JAMLf31/k5uaKLVu2aOfXrVs3cezYMbFu3Trh6uoqAIiOHTuKzz77TOzatUu7Pdzd3cXOnTuFEEIkJyeL0aNHiw4dOgg7Ozvh6ekpnn/+eXHt2jWduhta9/Xr1wulUikAiC5duohPP/3U4O0hhGj26xIWFibs7e1F586dhZ2dnXBxcRFTpkwR2dnZOssxZHsKIcTp06dF165dhVKpFMOHDxe3b982KO8yMjJEnz59tDnn5eUlYmNjzWpd3n//feHn56f9DlDf3/79+7XLio6OFh4eHsLNzU3MmDFDvPfeewKA8PPz0y6n1sCBA8WSJUvq3D4t+R5inhgvJSVF8OcP62RueSxE3fvVmpoasXHjRvHEE08Ie3t74e7uLqZOnSouXbrU6LQN7ZciIiL08t9Qrf3dobHjFEMwQ5mhzc1Q5kHT8PjfOjXwedgtE0KIZvY7ERGRGZLJZEhJSeE9Z6lF8P1lPD7TyLq09OvJ9wvVZ968edizZw9+//13qUtpNktfl4kTJ+K9996Dr69vqy6X+wfj1d6znz9/WB/mMRnD0nPnUZa+LlJlKPOgaXj8b50a+Dzs4e3piIiIiIiILEh1dbXUJZiMJa3Lo7fqOX/+PBQKRav/2EVERM1jSbnTGEtaF2YokWVhpxEREVmMX375BTKZrNG/kJAQqUslMrlvv/0WS5Yswb59+9C9e3ft+/2ll17Sazt27Fg4OzvD1tYWffr0wenTpyWo2HCrV69G79694eLiAgcHB/j7++Ott95CcXGxTru1a9fW+Znv27ev3jwrKysRFxcHf39/yOVyuLm5oW/fvsjJyQEAHDx4EOvXr7eog21zwX2xPm6TtiE6OhpZWVm4fPkyXnnlFaxZs0bqkqgFzZs3T+fzO3v2bL021pzNtWpqahAfH4+goKA6xxuSzfVl7oEDB3SmadeuXYuuS1tgiXlkiTWT8ZihbUtbz1BDj28B4Pjx4xg2bBhUKhXUajWio6Px8OFD7XipMpSdRkREZDGefPJJCCEa/du1a5fUpRKZ1IoVK5CQkIClS5ciODgYV69ehZ+fHzw9PbFjxw6kpaXptP/mm2+wZ88eTJo0CZmZmRg0aJBElRvmyJEjeP3115GTk4O7d+8iLi4OW7Zs0d4SpilmzZqFTz75BJ999hlKS0vx888/w8/PT/tFffLkyVAoFBgzZgwKCgpMtSptAvfF+lprmyxduhTJycl48OABfH19sXfvXhOtQeuzxHVRqVR48skn8ac//QkrV65E7969pS6JWpiHhwcOHTqES5cuYfv27TrjrD2bASArKwsjRoxAVFQUSktLmzyf+jL3ueeew40bN3D06FFMmDDBFCW3eZaY0cxQ41niujBD2562nKGGHt9mZmZi7NixGDNmDPLz87F//3589NFHCA8P17aRKkPZaUREREQWp6ysrN4zXi1pGYZYt24ddu3ahd27d8PZ2VlnXEJCAmxsbBAWFoYHDx5IVGHzOTk5ISwsDB4eHnB2dsbMmTMxdepUfP3117h+/bpO208//VTvR4SffvpJp82uXbtw4MAB7NmzB8888wzs7OygVquRmpqqc+bzwoUL0b9/f0yYMAFVVVWtsq5EzREXF4eHDx9CCIFff/0V06dPl7qkJrPEdVm7di2qq6uRm5uLSZMmSV2OpNpKDiuVSowbNw49evSAg4ODdnhbyOZz585h8eLFCA8Px4ABAxpsa0g215W5MpkMnTt3hkajwRNPPNFi60IEWGbu1McS14UZ+n+YodafoYYe365ZswZeXl5YtWoVHB0dMXToUERHR+Pjjz/GL7/8om0nRYay04iIiIgszvbt25GXl2fxy2jMlStXsGzZMqxatQoKhUJvfFBQECIiInDz5k28+eabElRoGl9++SVsbW11htVeXt+UM5vff/99DBo0CAEBAY22XblyJc6ePYstW7YYvRwioraqreRwXdpKNvfv3x/79u3Diy++qPNjX3Mwc4mImKFtIUMN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IiJqs3bv3o3jx4/jH//4B2QymdTlEJGJsdOIiIiILIJGo4EQgs81IiIiIiIikkhFRQWWLl2Kl156CUOGDJG6HCJqAew0IiIiIovQrl079OrVi881IiIiIiIiksjmzZtx69YtrFmzRupSiKiFsNOIiIiILIZGo+FzjYiIiIiIiCSQl5eHdevWITo6Gj4+PlKXQ0QthJ1GREREZDE0Gg1++OEHlJaWSl0KERERERFRmxITEwMnJye8+eabUpdCRC2InUZERERkMUaOHInKykpkZGRIXQoREREREVGbcfHiRSQnJ+Odd96Bo6Oj1OUQUQtipxERERFZDG9vb3Tr1o23qCMiIiIiImpFkZGRCAgIwIsvvih1KUTUwuykLoCIiIjIGCNGjMCxY8ekLoOIiIiIiKhN+OKLL/DNN9/g6NGjsLHhNQhE1o6fciIiIrIoGo0GGRkZqKiokLoUIiIiIiIiq1ZVVYXFixdjxowZ0Gg0UpdDRK2AnUZERERkUUaMGIHS0lL8+OOPUpdCRERERERk1RITE3HlyhXExcVJXQoRtRJ2GhEREZFF6dGjB9RqNW9RR0RERERE1ILu37+PNWvWIDIyEv7+/lKXQ0SthJ1GREREZHGGDx/OTiMiIiIiIqIWtHLlStja2mLJkiVSl0JErYidRkRERGRxNBoNjh07hurqaqlLISIiIiIisjqXLl3C+++/jzVr1sDV1VXqcoioFbHTiIiIiCyORqPBgwcP8NNPP0ldChERERERkdV588038cQTT2DOnDlSl0JErYydRkRERGRx+vXrBzc3Nxw9elTqUoiIiIiIiKzKkSNH8OWXXyI+Ph52dnZSl0NErYydRkRERGRxbGxsMGzYMD7XiIiIiIiIyISqq6sRGRmJv/zlLxg7dqzU5RCRBNhpRERERBZJo9HwSiMiIiIiIiIT2r59Oy5evIh169ZJXQoRSYSdRkRERGSRRowYgTt37uDy5ctSl0JERERERGTxioqKsGLFCsyfPx99+vSRuhwikgg7jYiIiMgiDR48GCqVilcbERERERERmUBsbCwePnyI5cuXS10KEUmInUZERERkkezt7REYGMjnGhERERERETXTr7/+in/84x9YsWIFPD09pS6HiCTETiMiIiKyWBqNhp1GREREREREzRQdHY3OnTsjPDxc6lKISGLsNCIiIiKLNWLECPz6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3PDzZhla4v1NfP9T05jr5/H+/ftmfdcFft4sg7m+v6nF7bGTugIiIiKilmBjwwuqiYjIdKy5s4iIiKyLOXcYEZH5468pRERERERERERERERExE4jIiIiIiIiIiIiIiIiYqcRERERERERERERERERgZ1GREREREREREREREREBHYaEREREdXrq6++gqurK7744gupSzF73377LZYsWYJ9+/ahe/fukMlkkMlkeOmll/Tajh07Fs7OzrC1tUWfPn1w+vRpCSo23OrVq9G7d2+4uLjAwcEB/v7+eOutt1BcXKzTbu3atdr1fvSvb9++evOsrKxEXFwc/P39IZfL4ebmhr59+yInJwcAcPDgQaxfvx7V1dWtsYpEVA/mgOGsOQdq1dTUID4+HkFBQXWONyQHuH8norowbwxnzXlj6HEHABw/fhzDhg2DSqWCWq1GdHQ0Hj58qB3PvKHmYKcRERERUT2EEFKXYBFWrFiBhIQELF26FMHBwbh69Sr8/Pzg6emJHTt2IC0tTaf9N998gz179mDSpEnIzMzEoEGDJKrcMEeOHMHrr7+OnJwc3L17F3FxcdiyZQtmzJjR5HnOmjULn3zyCT777DOUlpbi559/hp+fn/aAcPLkyVAoFBgzZgwKCgpMtSpEZCTmgGGsPQcAICsrCyNGjEBUVBRKS0ubPB/u34moLswbw1h73hh63JGZmYmxY8dizJgxyM/Px/79+/HRRx8hPDxc24Z5Q83BTiMiIiKiekycOBEPHjzApEmTpC4FZWVl9Z7ZLKV169Zh165d2L17N5ydnXXGJSQkwMbGBmFhYXjw4IFEFTafk5MTwsLC4OHhAWdnZ8ycORNTp07F119/jevXr+u0/fTTTyGE0Pn76aefdNrs2rULBw4cwJ49e/DMM8/Azs4OarUaqampOmejL1y4EP3798eECRNQVVXVKutKRLqYA41rCzlw7tw5LF68GOHh4RgwYECDbQ3JAe7fiehxzJvGtYW8MfS4Y82aNfDy8sKqVavg6OiIoUOHIjo6Gh9//DF++eUXbTvmDTUVO42IiIiILMD27duRl5cndRk6rly5gmXLlmHVqlVQKBR644OCghAREYGbN2/izTfflKBC0/jyyy9ha2urM6xdu3YA0KSzzd9//30MGjQIAQEBjbZduXIlzp49iy1bthi9HCKyLswB6fTv3x/79u3D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Wq166qmn9NJLL6l27dry8fFR7969FRoaqq1bt6pp06aSrq80Kq0mTZpo/fr12rBhg6pVq6aePXtqwIAB+tOf/lRi/e+++061a9cuces6AACA27GYsvyfCgAAAACUYNmyZerTp0+ZfggF7hX3wv07ePBgLV++XBcuXHBaDGVlsViUnJysqKioUtU/ePCgGjVqpKSkJPXr16+So6t4RUVFateunWJiYjRgwABnh1OiCxcuKDg4WFOnTrUnxkqrrNcTAAA8kJaz0ggAAAAAgHtAYWGhs0OoVOHh4Zo8ebImT56sK1euODucMiksLNTq1auVlZWl6OhoZ4dzUxMnTtRjjz2m2NhYZ4cCAADuUySNAAAAAKCSvf3226pRo4YsFoveeecdZ4dTJitXrlRYWFixd664u7urRo0aateund566y37Fl7ArYwePVq9e/dWdHS0MjIynB1OqW3evFkrV67U2rVr5enp6exwSjR79mzt2rVLn3/+udzc3JwdDgAAuE+RNAIAAACASjZy5Eh98803zg7jjvTs2VOHDx9WvXr15OfnJ2OMioqKlJaWpmXLlqlu3boaNWqUmjRpou3btzs73PvSmDFjlJSUpIyMDNWtW1crVqxwdkiVatq0aYqNjdX06dOdHUqptW/fXh9//LFq1arl7FBKlJKSomvXrmnz5s0KCAhwdjgAAOA+RtIIAAAAwAMhNzdXkZGR930f9wOLxSJ/f3+1a9dOSUlJWrZsmc6dO6fOnTvfV6tH7hXx8fG6du2ajDE6cuSIevXq5eyQKl2HDh00Y8YMZ4fxwHj++ec1evRoubi4ODsUAABwnyNpBAAAAOCBsGjRIqWlpd33fdyPevXqpZiYGKWlpd132+8BAAAA+C+SRgAAAACcwhij2bNnq1GjRvLw8FBAQIC6deumffv22evExsbK3d3dYUuol19+WV5eXrJYLDp//rwkKS4uTiNGjNChQ4dksVgUHh6uuXPnymq1qkaNGho8eLCCgoJktVoVGRmpbdu2VUgf5fX111+rcePG8vPzk9VqVUREhNavXy9Jeumll+zvD6pXr5527twpSerfv788PT3l5+enTz75RJJUWFioN998UyEhIbLZbGrWrJmSk5MlSbNmzZKnp6d8fHyUlpamESNGqHbt2tq/f7/WrVsnX19fTZs2rdxjiYmJkSStXbvWXnaruBIT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\n",
            "text/plain": [
              "<IPython.core.display.Image object>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 105
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "CxXnuARwxRye"
      },
      "source": [
        "What is label smoothing?\n",
        "\n",
        "For example, if our model gets too confident on a single class (e.g. its prediction probability is really high), it may get stuck on that class and not consider other classes...\n",
        "\n",
        "Really confident: `[0.0, 0.0, 1.0, 0.0, 0.0]` \n",
        "\n",
        "What label smoothing does is it assigns some of the value from the highest pred prob to other classes, in turn, hopefully improving generalization: `[0.01, 0.01, 0.96, 0.01, 0.01]` \n",
        "\n",
        "> 📖 **Resource:** For more on label smoothing, see this blog post from PyImageSearch: https://www.pyimagesearch.com/2019/12/30/label-smoothing-with-keras-tensorflow-and-deep-learning/ "
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "-efHJf0TwYmD"
      },
      "source": [
        "# Compile token, char, and positional embedding model\n",
        "model_5.compile(loss=tf.keras.losses.CategoricalCrossentropy(label_smoothing=0.2), # helps to prevent overfitting\n",
        "                optimizer=tf.keras.optimizers.Adam(),\n",
        "                metrics=[\"accuracy\"])"
      ],
      "execution_count": 106,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "YU2KUkKiyWVd"
      },
      "source": [
        "### Create tribrid embedding datasets using tf.data"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "mumnsjY5yugp"
      },
      "source": [
        "# Create training and valiadation datasets (with all four kinds of input data)\n",
        "train_char_token_pos_data = tf.data.Dataset.from_tensor_slices((train_line_numbers_one_hot,\n",
        "                                                                train_total_lines_one_hot,\n",
        "                                                                train_sentences,\n",
        "                                                                train_chars))\n",
        "train_char_token_pos_labels = tf.data.Dataset.from_tensor_slices(train_labels_one_hot)\n",
        "train_char_token_pos_dataset = tf.data.Dataset.zip((train_char_token_pos_data, train_char_token_pos_labels))\n",
        "train_char_token_pos_dataset = train_char_token_pos_dataset.batch(32).prefetch(tf.data.AUTOTUNE)\n",
        "\n",
        "# Do the same as above but for the validation dataset\n",
        "val_char_token_pos_data = tf.data.Dataset.from_tensor_slices((val_line_numbers_one_hot,\n",
        "                                                              val_total_lines_one_hot,\n",
        "                                                              val_sentences,\n",
        "                                                              val_chars))\n",
        "val_char_token_pos_labels = tf.data.Dataset.from_tensor_slices(val_labels_one_hot)\n",
        "val_char_token_pos_dataset = tf.data.Dataset.zip((val_char_token_pos_data, val_char_token_pos_labels))\n",
        "val_char_token_pos_dataset = val_char_token_pos_dataset.batch(32).prefetch(tf.data.AUTOTUNE)"
      ],
      "execution_count": 107,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Nsorlloj0elx",
        "outputId": "e0c49227-875e-4676-9aad-1cbed74afd29"
      },
      "source": [
        "# Check input shapes\n",
        "train_char_token_pos_dataset, val_char_token_pos_dataset"
      ],
      "execution_count": 108,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "(<PrefetchDataset shapes: (((None, 15), (None, 20), (None,), (None,)), (None, 5)), types: ((tf.float32, tf.float32, tf.string, tf.string), tf.float64)>,\n",
              " <PrefetchDataset shapes: (((None, 15), (None, 20), (None,), (None,)), (None, 5)), types: ((tf.float32, tf.float32, tf.string, tf.string), tf.float64)>)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 108
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "I7UWbx9908yJ"
      },
      "source": [
        "### Fitting, evaluating and making predicitions with our tribrid model"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "TaOqwUF51VQJ",
        "outputId": "a2be5795-5aa2-4218-f7fd-d01acec9815f"
      },
      "source": [
        "# Fit our tribrid embedding model\n",
        "history_model_5 = model_5.fit(train_char_token_pos_dataset,\n",
        "                              steps_per_epoch=int(0.1 * len(train_char_token_pos_dataset)),\n",
        "                              epochs=3,\n",
        "                              validation_data=val_char_token_pos_dataset,\n",
        "                              validation_steps=int(0.1 * len(val_char_token_pos_dataset)))"
      ],
      "execution_count": 109,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Epoch 1/3\n",
            "562/562 [==============================] - 34s 48ms/step - loss: 1.2179 - accuracy: 0.6248 - val_loss: 0.9806 - val_accuracy: 0.8045\n",
            "Epoch 2/3\n",
            "562/562 [==============================] - 25s 45ms/step - loss: 0.9705 - accuracy: 0.8126 - val_loss: 0.9497 - val_accuracy: 0.8271\n",
            "Epoch 3/3\n",
            "562/562 [==============================] - 23s 40ms/step - loss: 0.9543 - accuracy: 0.8176 - val_loss: 0.9395 - val_accuracy: 0.8305\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "3k6Z8InE2QrY",
        "outputId": "07fc54a8-33ec-4222-c5dd-40b0dc88fe9b"
      },
      "source": [
        "# Make predictions with the char token pos model\n",
        "model_5_pred_probs = model_5.predict(val_char_token_pos_dataset, verbose=1)\n",
        "model_5_pred_probs"
      ],
      "execution_count": 110,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "945/945 [==============================] - 21s 20ms/step\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "array([[0.5018536 , 0.11003216, 0.01080302, 0.3623029 , 0.01500831],\n",
              "       [0.5277809 , 0.09389856, 0.03740778, 0.32971728, 0.01119554],\n",
              "       [0.28180408, 0.08831163, 0.11122281, 0.4640036 , 0.05465783],\n",
              "       ...,\n",
              "       [0.03720175, 0.10561775, 0.04516607, 0.02880904, 0.78320545],\n",
              "       [0.03478291, 0.32260662, 0.09570655, 0.02872073, 0.51818323],\n",
              "       [0.2580621 , 0.5275318 , 0.11692096, 0.04311179, 0.05437337]],\n",
              "      dtype=float32)"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 110
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "_rxksuqZ2fjx",
        "outputId": "3c9e0ce8-54ad-462a-ccb1-42e409e687f1"
      },
      "source": [
        "# Convert pred probs to pred labels\n",
        "model_5_preds = tf.argmax(model_5_pred_probs, axis=1)\n",
        "model_5_preds"
      ],
      "execution_count": 111,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<tf.Tensor: shape=(30212,), dtype=int64, numpy=array([0, 0, 3, ..., 4, 4, 1])>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 111
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "pQphnJTy2mjU",
        "outputId": "8124ff0b-bb69-4a94-c862-134c11a1fb9d"
      },
      "source": [
        "# Calculate results of char token pos model\n",
        "model_5_results = calculate_results(y_true=val_labels_encoded,\n",
        "                                    y_pred=model_5_preds)\n",
        "model_5_results"
      ],
      "execution_count": 112,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "{'accuracy': 83.36422613531047,\n",
              " 'f1': 0.832856749242421,\n",
              " 'precision': 0.8329936901758904,\n",
              " 'recall': 0.8336422613531047}"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 112
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "CisqsDcU3QGp"
      },
      "source": [
        "## Compare model results"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 233
        },
        "id": "OTDoBFDF5k5L",
        "outputId": "3fa71b63-b4a8-4d1c-c249-090bbfcdc3df"
      },
      "source": [
        "# Combine model results into a dataframe\n",
        "all_model_results = pd.DataFrame({\"model_0_baseline\": baseline_results,\n",
        "                                  \"model_1_custom_token_embedding\": model_1_results,\n",
        "                                  \"model_2_pretrained_token_embedding\": model_2_results,\n",
        "                                  \"model_3_custom_char_embedding\": model_3_results,\n",
        "                                  \"model_4_hybrid_char_token_embedding\": model_4_results,\n",
        "                                  \"model_5_pos_char_token_embedding\": model_5_results})\n",
        "all_model_results = all_model_results.transpose()\n",
        "all_model_results"
      ],
      "execution_count": 113,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/html": [
              "<div>\n",
              "<style scoped>\n",
              "    .dataframe tbody tr th:only-of-type {\n",
              "        vertical-align: middle;\n",
              "    }\n",
              "\n",
              "    .dataframe tbody tr th {\n",
              "        vertical-align: top;\n",
              "    }\n",
              "\n",
              "    .dataframe thead th {\n",
              "        text-align: right;\n",
              "    }\n",
              "</style>\n",
              "<table border=\"1\" class=\"dataframe\">\n",
              "  <thead>\n",
              "    <tr style=\"text-align: right;\">\n",
              "      <th></th>\n",
              "      <th>accuracy</th>\n",
              "      <th>precision</th>\n",
              "      <th>recall</th>\n",
              "      <th>f1</th>\n",
              "    </tr>\n",
              "  </thead>\n",
              "  <tbody>\n",
              "    <tr>\n",
              "      <th>model_0_baseline</th>\n",
              "      <td>72.183238</td>\n",
              "      <td>0.718647</td>\n",
              "      <td>0.721832</td>\n",
              "      <td>0.698925</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>model_1_custom_token_embedding</th>\n",
              "      <td>78.607838</td>\n",
              "      <td>0.782934</td>\n",
              "      <td>0.786078</td>\n",
              "      <td>0.783434</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>model_2_pretrained_token_embedding</th>\n",
              "      <td>71.551039</td>\n",
              "      <td>0.715855</td>\n",
              "      <td>0.715510</td>\n",
              "      <td>0.712592</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>model_3_custom_char_embedding</th>\n",
              "      <td>66.026744</td>\n",
              "      <td>0.658014</td>\n",
              "      <td>0.660267</td>\n",
              "      <td>0.650934</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>model_4_hybrid_char_token_embedding</th>\n",
              "      <td>73.153052</td>\n",
              "      <td>0.733487</td>\n",
              "      <td>0.731531</td>\n",
              "      <td>0.729255</td>\n",
              "    </tr>\n",
              "    <tr>\n",
              "      <th>model_5_pos_char_token_embedding</th>\n",
              "      <td>83.364226</td>\n",
              "      <td>0.832994</td>\n",
              "      <td>0.833642</td>\n",
              "      <td>0.832857</td>\n",
              "    </tr>\n",
              "  </tbody>\n",
              "</table>\n",
              "</div>"
            ],
            "text/plain": [
              "                                      accuracy  precision    recall        f1\n",
              "model_0_baseline                     72.183238   0.718647  0.721832  0.698925\n",
              "model_1_custom_token_embedding       78.607838   0.782934  0.786078  0.783434\n",
              "model_2_pretrained_token_embedding   71.551039   0.715855  0.715510  0.712592\n",
              "model_3_custom_char_embedding        66.026744   0.658014  0.660267  0.650934\n",
              "model_4_hybrid_char_token_embedding  73.153052   0.733487  0.731531  0.729255\n",
              "model_5_pos_char_token_embedding     83.364226   0.832994  0.833642  0.832857"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 113
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "17OZYpI16Hhz"
      },
      "source": [
        "# Reduce the accuracy to same scale as other metrics\n",
        "all_model_results[\"accuracy\"] = all_model_results[\"accuracy\"]/100"
      ],
      "execution_count": 114,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 619
        },
        "id": "WsbJnFY_6iNx",
        "outputId": "4adcaa13-ccf2-46f6-e977-c4dbe634616a"
      },
      "source": [
        "# Plot and compare all model results\n",
        "all_model_results.plot(kind=\"bar\", figsize=(10, 7)).legend(bbox_to_anchor=(1.0, 1.0));"
      ],
      "execution_count": 115,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAqkAAAJaCAYAAAAMIN5wAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzde5yWdZ3/8febk3hAQxgQBRxQYBgFBEc8puYp/OUhDyXaWrYWm8VmdlK3XTMrTTvtUu4u5jHTdc3MUDFKU2wzkwHlDIZIqIlOioASwsDn98d9jQ44MPc93Pd9Xdz36/l4zIO5rus793zm6+133nMdvl9HhAAAAIAs6ZR2AQAAAMCWCKkAAADIHEIqAAAAMoeQCgAAgMwhpAIAACBzCKkAAADInC5pfePevXtHbW1tWt8eAAAgbzNnzvxbRNSkXUc1SS2k1tbWqrGxMa1vDwAAkDfbf0m7hmrD5X4AAABkDiEVAAAAmUNIBQAAQOakdk8qAADAjmzmzJl9unTpcqOkA8WJv0JtkjSvubn5UwcffPCrbTUgpAIAAHRAly5dbtxrr72G19TUrOzUqVOkXc+OZNOmTW5qaqpfsWLFjZJOa6sNqR8AAKBjDqypqVlNQC1cp06doqamZpVyZ6HbblPGegAAACpJJwJqxyV9t9UsSkgFAABA5nBPKgAAQBHUXvbgwcV8vWXf+dDMYr7e9tiwYYO6du1a1u/JmVQAAIAd2AknnLDfAQccMHz//fc/4Hvf+15vSbrnnnt2r6+vHz5s2LD6ww8/fKgkrVq1qtPZZ59dO3To0PqhQ4fW33rrre+TpF122WV0y2vdcsstPc8666xaSTrrrLNqzzvvvIEjR46su+iii/o/+uijuxx00EF1w4cPrx89enTd7Nmzd5Kk5uZmTZgwof+QIUMOGDp0aP23v/3tPlOmTOlxwgkn7Nfyur/85S93P/HEE/dTATiTCgAAsAO74447lvXt23fjm2++6dGjR9efc845b0ycOLH2scceW1RXV7f+lVde6SxJl112Wb/dd99947PPPrtAkpqamjq399ovv/xyt1mzZi3q0qWLXn/99U4zZsxY1LVrV9133309vvrVr/afNm3ac9///vdrli9f3m3BggXzu3btqldeeaVzTU3NxosvvnjgX//61y577713880339zrk5/85N8K+bkIqQAAADuwa6+9tu+DDz74PklasWJF10mTJtWMHTt2TV1d3XpJ6tu370ZJevzxx3e/6667lrZ8XU1Nzcb2XvvMM89c2aVLLi6+/vrrnc8555xBy5Yt6247NmzYYEn63e9+t/tnPvOZppbbAVq+30c/+tHXfvKTn+z5uc997rVZs2btdu+99z5fyM9FSAUAANhBPfDAAz2mT5/eo7GxcVGPHj02jR07dtjo0aPXLl68uHu+r2H7nc///ve/u/Wx3XbbbVPL55deeuk+xxxzzJrf/va3zy1evLjbcccdN2xbr3vRRRe99qEPfWj/7t27x6mnnrqy0HtauScVAABgB/XGG2903mOPPTb26NFj09NPP9199uzZu65bt67TU0891WPRokXdJKnlcv8xxxyz+oc//GGflq9tudzfq1evDbNmzeq+ceNG/epXv+q5te+1evXqzv37918vSZMnT+7dsv/4449fPXny5N4bNmxQ6+9XW1u7oW/fvhu+//3v95swYUJBl/olQioAAMAO66yzzlrV3NzswYMHH/CVr3xln1GjRr3Vp0+f5kmTJi0744wz9h82bFj9GWecMViSrrnmmpffeOONzkOGDDlg2LBh9VOnTu0hSd/4xjdeOv300/cfM2ZMXd++fTds7XtdeumlK6688sr+w4cPr29ubn5n/yWXXNLUv3//9XV1dQcMGzas/qabbtqz5dj48eNf69ev3/oxY8asK/Rnc0Q6c9A2NDREY2NjKt8bAACgELZnRkRD632zZ89eNmrUqILPEFaTj3/84wNHjx699pJLLmmzn2bPnt171KhRtW0d455UAADwjtrLHiyo/bLu5xXUfsSggXm3vfua5vYbtTJ80cKC2qO0DjjggOE777zzpsmTJ7/Qka8npAIAAKDo5s+fv11/NXBPKgAAADKHkAoAAIDMIaQCAAAgcwipAAAAyBxCKgAAAN7x+OOP73LBBRcM2NrxZcuWdR03btzgUtfB0/0AAADFcOUeBxf39VbNLMbLNDc3q0uX/CPf0Ucfvfboo49eu7XjtbW1G379618vLUZt28KZVAAAgB3U4sWLuw0aNOiA0047bdDgwYMPGDdu3OA1a9Z02meffUZcdNFF+9TX1w+/+eabe9577727H3TQQXX19fXDTz755MGrVq3qJEnTp0/fZfTo0XXDhg2rHzFixPCVK1d2euCBB3p84AMf2F+SHnzwwd3q6urq6+rq6ocPH16/cuXKTosXL+42ZMiQAyRp7dq1Pvvss2uHDh1aP3z48Pr777+/hyRNmjSp10knnbTf+9///iH77rvvgZ/5zGf6F/qzEVIBAAB2YMuWLes+ceLEV5cuXTq/R48em7773e/WSFKvXr2aFyxYsPDUU09dc/XVV/d7/PHHn12wYMHCMWPGrP3mN7/Zd926df7Yxz6237//+78vX7x48YLp06cv3m233Ta1fu3vf//7e02aNOkvixYtWvDkk08u2vL4tdde28e2nn322QV33nnn0gkTJtSuXbvWkrRgwYJd7rvvvqULFy6cP2XKlJ5LlizpWsjPRUgFAADYge21117rTzrppLck6fzzz3/tiSee2E2SPv7xj6+UpMcee2zX5557rvvYsWPr6urq6u+6665ey5cv7zZnzpzuffr02XDMMceslaQ999xzU9eum+fIww477M0vf/nLA771rW/1+dvf/tZ5y+NPPPHEbueff/5rkjR69Oh1e++99/q5c+d2l6Sjjjpqda9evTbusssusf/++6977rnndirk58orpNoeZ3ux7SW2L2vj+EDbj9p+2vYc2/+vkCIAAADQMbbb3O7Ro8cmSYoIHXXUUasXLVq0YNGiRQuee+65+Xffffdf8nntq6++esWNN974l7///e+d3v/+99c9/fTT3fOtq1u3btHyeefOnWPDhg3eVvsttRtSbXeWdL2kkyXVSzrXdv0Wzf5V0t0RMVrSeEn/WUgRAAAA6JiXX36528MPP7yrJN1xxx17HnHEEW+2Pn7ssce+1djYuNu8efN2kqTVq1d3mjNnzk4jR45c9+qrr3adPn36LpK0cuXKThs2bNjstefPn7/T2LFj//7tb397xciRI9+aN2/eZiH1yCOPfPNnP/vZnpI0Z86cnV5++eVuI0eOXFeMnyufM6ljJS2JiKURsV7SXZJO36JNSNo9+XwPSX8tRnEAAADYttra2nU/+tGP+gwePPiAN954o8uXv/zlptbH99577+bJkycvGz9+/OChQ4fWNzQ01M2dO7d79+7d44477nju85///MBhw4bVH3vssUPXrl27WTa87rrr+gwZMuSAoUOH1nft2jXOPvvsVa2Pf/WrX31106ZNHjp0aP0555yz3+TJk5ftvPPOoSJwxLZf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\n",
            "text/plain": [
              "<Figure size 720x504 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 619
        },
        "id": "7vBNuVwi6seV",
        "outputId": "737a298e-f87d-4f4f-aa25-340620f6ab23"
      },
      "source": [
        "# Sort models results by f1-score\n",
        "all_model_results.sort_values(\"f1\", ascending=True)[\"f1\"].plot(kind=\"bar\", figsize=(10, 7));"
      ],
      "execution_count": 116,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "iVBORw0KGgoAAAANSUhEUgAAAlMAAAJaCAYAAAALTsIgAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdebgkZX3//feHQdxRlHEJ6+iDIFFQHBHUGDcSjAaMK/zUaCSSRRQ1vzzBxKjBxC15smjQaFRUYkJwi6OCoAT3jWETAdERUUCjoyGAIiD4ff6oOnJmcpjTUN1dfarfr+s615yqrmG+ue1Uf/que0lVIUmSpFtmq74LkCRJWskMU5IkSR0YpiRJkjowTEmSJHVgmJIkSerAMCVJktTB1n39w9tvv33tuuuuff3zkiRJIzvjjDN+WFWrl3qttzC16667sn79+r7+eUmSpJEl+fZNveZjPkmSpA4MU5IkSR0YpiRJkjowTEmSJHVgmJIkSerAMCVJktSBYUqSJKkDw5QkSVIHhilJkqQODFOSJEkdGKYkSZI6MExJkiR1YJiSJEnqwDAlSZLUgWFKkiSpA8OUJElSB1v3XYAkSZodux710b5LuMUufu3je/l37ZmSJEnqwDAlSZLUgWFKkiSpA8OUJElSB4YpSZKkDgxTkiRJHRimJEmSOjBMSZIkdWCYkiRJ6sAwJUmS1MFIYSrJgUkuTLIhyVFLvL5zktOSnJXkK0l+Y/ylSpIkzZ5lw1SSVcAxwOOAPYFDk+y52WUvA06oqgcChwBvGnehkiRJs2iUnql9gQ1VdVFVXQccDxy82TUFbNv+fifgu+MrUZIkaXaNEqZ2AC5ZdHxpe26xVwLPTHIpcCLwgqX+Q0kOT7I+yfqNGzfegnIlSZJmy7gGoB8KvLOqdgR+Azguyf/6b1fVW6tqbVWtXb169Zj+aUmSpP6MEqYuA3ZadLxje26xw4ATAKrqC8BtgO3HUaAkSdIsGyVMnQ7slmRNkm1oBpiv2+ya7wCPAUhyX5ow5XM8SZI0eMuGqaq6HjgCOBm4gGbW3nlJjk5yUHvZHwHPS3IO8G/Ac6qqJlW0JEnSrNh6lIuq6kSageWLz7180e/nAw8bb2mSJEmzzxXQJUmSOhipZ0qSpD7setRH+y7hFrv4tY/vuwRNiT1TkiRJHRimJEmSOjBMSZIkdWCYkiRJ6sAwJUmS1IFhSpIkqQPDlCRJUgeGKUmSpA4MU5IkSR0YpiRJkjowTEmSJHVgmJIkSerAMCVJktSBYUqSJKkDw5QkSVIHhilJkqQODFOSJEkdGKYkSZI6MExJkiR1YJiSJEnqwDAlSZLUgWFKkiSpA8OUJElSB1v3XYAkrRS7HvXRvku4xS5+7eP7LkEaLHumJEmSOjBMSZIkdWCYkiRJ6sAwJUmS1IFhSpIkqQPDlCRJUgcujSCtUE7Tl6TZYM+UJElSByOFqSQHJrkwyYYkRy3x+t8lObv9+XqS/xl/qZIkSbNn2cd8SVYBxwAHAJcCpydZV1XnL1xTVS9edP0LgAdOoFZJkqSZM0rP1L7Ahqq6qKquA44HDt7C9YcC/zaO4iRJkmbdKGFqB+CSRceXtuf+lyS7AGuA/+xemiRJ0uwb92y+Q4D3VdUNS72Y5HDgcICdd955zP+0+uTMMknSvBqlZ+oyYKdFxzu255ZyCFt4xFdVb62qtVW1dvXq1aNXKUmSNKNGCVOnA7slWZNkG5rAtG7zi5LsAWwHfGG8JUqSJM2uZcNUVV0PHAGcDFwAnFBV5yU5OslBiy49BDi+qmoypUqSJM2ekcZMVdWJwImbnXv5ZsevHF9ZkiRJK4MroEuSJHVgmJIkSerAMCVJktSBYUqSJKkDw5QkSVIHhilJkqQODFOSJEkdGKYkSZI6MExJkiR1YJiSJEnqwDAlSZLUgWFKkiSpA8OUJElSB4YpSZKkDgxTkiRJHRimJEmSOti67wImYdejPtp3CbfYxa99fN8lSJKkm8GeKUmSpA4MU5IkSR0YpiRJkjowTEmSJHVgmJIkSerAMCVJktSBYUqSJKkDw5QkSVIHhilJkqQODFOSJEkdGKYkSZI6MExJkiR1YJiSJEnqwDAlSZLUgWFKkiSpA8OUJElSB4YpSZKkDgxTkiRJHYwUppIcmOTCJBuSHHUT1zwtyflJzkvyr+MtU5IkaTZtvdwFSVYBxwAHAJcCpydZV1XnL7pmN+ClwMOq6vIkd5tUwZIkSbNklJ6pfYENVXVRVV0HHA8cvNk1zwOOqarLAarqB+MtU5IkaTaNEqZ2AC5ZdHxpe26x+wD3SfK5JF9McuBS/6EkhydZn2T9xo0bb1nFkiRJM2RcA9C3BnYDHgkcCvxzkjtvflFVvbWq1lbV2tWrV4/pn5YkSerPKGHqMmCnRcc7tucWuxRYV1U/q6pvAV+nCVeSJEmDNkqYOh3YLcmaJNsAhwDrNrvmP2h6pUiyPc1jv4vGWKckSdJMWjZMVdX1wBHAycAFwAlVdV6So5Mc1F52MvCjJOcDpwF/XFU/mlTRkiRJs2LZpREAqupE4MTNzr180e8FvKT9kSRJmhuugC5JktSBYUqSJKkDw5QkSVIHhilJkqQODFOSJEkdGKYkSZI6MExJkiR1YJiSJEnqwDAlSZLUgWFKkiSpA8OUJElSB4YpSZKkDgxTkiRJHRimJEmSOjBMSZIkdWCYkiRJ6sAwJUmS1IFhSpIkqQPDlCRJUgeGKUmSpA4MU5IkSR0YpiRJkjowTEmSJHVgmJIkSerAMCVJktSBYUqSJKkDw5QkSVIHhilJkqQODFOSJEkdGKYkSZI6MExJkiR1YJiSJEnqwDAlSZLUgWFKkiSpg5HCVJIDk1yYZEOSo5Z4/TlJNiY5u/353fGXKkmSNHu2Xu6CJKuAY4ADgEuB05Osq6rzN7v036vqiAnUKEmSNLNG6ZnaF9hQVRdV1XXA8cDBky1LkiRpZRglTO0AXLLo+NL23OaenOQrSd6XZKexVCdJkjTjxjUA/cPArlW1F/Bx4F1LXZTk8CTrk6zfuHHjmP5pSZKk/owSpi4DFvc07die+4Wq+lFVXdsevg140FL/oap6a1Wtraq1q1evviX1SpIkzZRRwtTpwG5J1iTZBjgEWLf4giT3XHR4EHDB+EqUJEmaXcvO5quq65McAZwMrALeUVXnJTkaWF9V64AXJjkIuB74b+A5E6xZkiRpZiwbpgCq6kTgxM3OvXzR7y8FXjre0iRJkmafK6BLkiR1YJiSJEnqwDAlSZLUgWFKkiSpA8OUJElSB4YpSZKkDgxTkiRJHRimJEmSOjBMSZIkdWCYkiRJ6sAwJUmS1IFhSpIkqQPDlCRJUgeGKUmSpA4MU5IkSR0YpiRJkjowTEmSJHVgmJIkSerAMCVJktSBYUqSJKkDw5QkSVIHhilJkqQODFOSJEkdGKYkSZI6MExJkiR1YJiSJEnqwDAlSZLUgWFKkiSpA8OUJElSB4YpSZKkDgxTkiRJHRimJEmSOjBMSZIkdWCYkiRJ6sAwJUmS1MFIYSrJgUkuTLIhyVFbuO7JSSrJ2vGVKEmSNLuWDVNJVgHHAI8D9gQOTbLnEtfdETgS+NK4i5QkSZpVo/RM7QtsqKqLquo64Hjg4CWuexXwOuCaMdYnSZI000YJUzsAlyw6vrQ99wtJ9gF2qqqPbuk/lOTwJOuTrN+4cePNLlaSJGnWdB6AnmQr4G+BP1ru2qp6a1Wtraq1q1ev7vpPS5Ik9W6UMHUZsNOi4x3bcwvuCNwP+GSSi4H9gHUOQpckSfNglDB1OrBbkjVJtgEOAdYtvFhVV1TV9lW1a1XtCnwROKiq1k+kYkmSpBmybJiqquuBI4CTgQuAE6rqvCRHJzlo0gVKkiTNsq1HuaiqTgRO3Ozcy2/i2kd2L0uSJGllcAV0SZKkDgxTkiRJHRimJEmSOjBMSZIkdWCYkiRJ6sAwJUmS1IFhSpIkqQPDlCRJUgeGKUmSpA4MU5IkSR0YpiRJkjowTEmSJHVgmJIkSerAMCVJktSBYUqSJKkDw5QkSVIHhilJkqQODFOSJEkdGKYkSZI6MExJkiR1YJiSJEnqwDAlSZLUgWFKkiSpA8OUJElSB4YpSZKkDgxTkiRJHRimJEmSOjBMSZIkdWCYkiRJ6sAwJUmS1IFhSpIkqQPDlCRJUgeGKUmSpA4MU5IkSR2MFKaSHJjkwiQbkhy1xOu/n+TcJGcn+WySPcdfqiRJ0uxZNkwlWQUcAzwO2BM4dImw9K9Vdf+qegDweuBvx16pJEnSDBqlZ2pfYENVXVRV1wHHAwcvvqCqrlx0eHugxleiJEnS7Np6hGt2AC5ZdHwp8JDNL0ryfOAlwDbAo8dSnSRJ0owb2wD0qjqmqu4N/AnwsqWuSXJ4kvVJ1m/cuHFc/7QkSVJvRglTlwE7LTresT13U44HnrjUC1X11qpaW1VrV69ePXqVkiRJM2qUMHU6sFuSNUm2AQ4B1i2+IMluiw4fD3xjfCVKkiTNrmXHTFXV9UmOAE4GVgHvqKrzkhwNrK+qdcARSR4L/Ay4HHj2JIuWJEmaFaMMQKeqTgRO3Ozcyxf9fuSY65IkSVoRXAFdkiSpA8OUJElSB4YpSZKkDgxTkiRJHRimJEmSOjBMSZIkdWCYkiRJ6sAwJUmS1IFhSpIkqQPDlCRJUgeGKUmSpA4MU5IkSR0YpiRJkjowTEmSJHVgmJIkSerAMCVJktSBYUqSJKkDw5QkSVIHhilJkqQODFOSJEkdGKYkSZI6MExJkiR1YJiSJEnqwDAlSZLUgWFKkiSpA8OUJElSB4YpSZKkDgxTkiRJHRimJEmSOjBMSZIkdWCYkiRJ6sAwJUmS1IFhSpIkqQPDlCRJUgeGKUmSpA5GClNJDkxyYZINSY5a4vWXJDk/yVeSnJpkl/GXKkmSNHuWDVNJVgHHAI8D9gQOTbLnZpedBaytqr2A9wGvH3ehkiRJs2iUnql9gQ1VdVFVXQccDxy8+IKqOq2qrm4PvwjsON4yJUmSZtMoYWoH4JJFx5e2527KYcBJS72Q5PAk65Os37hx4+hVSpIkzaixDkBP8kxgLfDXS71eVW+tqrVVtXb16tXj/KclSZJ6sfUI11wG7LToeMf23CaSPBb4M+BXq+ra8ZQnSZI020bpmTod2C3JmiTbAIcA6xZfkOSBwFuAg6rqB+MvU5IkaTYtG6aq6nrgCOBk4ALghKo6L8nRSQ5qL/tr4A7Ae5OcnWTdTfznJEmSBmWUx3xU1YnAiZude/mi3x875rokSZJWBFdAlyRJ6sAwJUmS1IFhSpIkqQPDlCRJUgeGKUmSpA4MU5IkSR0YpiRJkjowTEmSJHVgmJIkSerAMCVJktSBYUqSJKkDw5QkSVIHhilJkqQODFOSJEkdGKYkSZI6MExJkiR1YJiSJEnqwDAlSZLUgWFKkiSpA8OUJElSB4YpSZKkDgxTkiRJHRimJEmSOjBMSZIkdWCYkiRJ6sAwJUmS1IFhSpIkqQPDlCRJUgeGKUmSpA4MU5IkSR0YpiRJkjowTEmSJHVgmJIkSerAMCVJktTBSGEqyYFJLkyyIclRS7z+iCRnJrk+yVPGX6YkSdJsWjZMJVkFHAM8DtgTODTJnptd9h3gOcC/jrtASZKkWbb1CNfsC2yoqosAkhwPHAycv3BBVV3cvvbzCdQoSZI0s0Z5zLcDcMmi40vbc5IkSXNvqgPQkxyeZH2S9Rs3bpzmPy1JkjQRo4Spy4CdFh3v2J672arqrVW1tqrWrl69+pb8JyRJkmbKKGHqdGC3JGuSbAMcAqybbFmSJEkrw7JhqqquB44ATgYuAE6oqvOSHJ3kIIAkD05yKfBU4C1Jzptk0ZIkSbNilNl8VNWJwImbnXv5ot9Pp3n8J0mSNFdcAV2SJKkDw5QkSVIHhilJkqQODFOSJEkdGKYkSZI6MExJkiR1YJiSJEnqwDAlSZLUgWFKkiSpA8OUJElSB4YpSZKkDgxTkiRJHRimJEmSOjBMSZIkdWCYkiRJ6sAwJUmS1IFhSpIkqQPDlCRJUgeGKUmSpA4MU5IkSR0YpiRJkjowTEmSJHVgmJIkSerAMCVJktSBYUqSJKkDw5QkSVIHhilJkqQODFOSJEkdGKYkSZI6MExJkiR1YJiSJEnqwDAlSZLUgWFKkiSpA8OUJElSB4YpSZKkDkYKU0kOTHJhkg1Jjlri9Vsn+ff29S8l2XXchUqSJM2iZcNUklXAMcDjgD2BQ5PsudllhwGXV9X/A/wd8LpxFypJkjSLRumZ2hfYUFUXVdV1wPHAwZtdczDwrvb39wGPSZLxlSlJkjSbUlVbviB5CnBgVf1ue/ws4CFVdcSia77aXnNpe/zN9pofbvbfOhw4vD3cHbhwXP+HTNn2wA+XvUrjZJtPn20+fbb59Nnm07dS23yXqlq91AtbT7OKqnor8NZp/puTkGR9Va3tu455YptPn20+fbb59Nnm0zfENh/lMd9lwE6Ljndszy15TZKtgTsBPxpHgZIkSbNslDB1OrBbkjVJtgEOAdZtds064Nnt708B/rOWe34oSZI0AMs+5quq65McAZwMrALeUVXnJTkaWF9V64C3A8cl2QD8N03gGrIV/6hyBbLNp882nz7bfPps8+kbXJsvOwBdkiRJN80V0CVJkjowTEmSJHVgmJIkSerAMCVJktTBVBftXMmSvGGJ01fQzGj80LTrmQdJbgf8EbBzVT0vyW7A7lX1kZ5LG6wk5wKbz0q5AlgP/GVVuX7cmHlvmb4kT1ri9BXAuVX1g2nXMw+G3uaGqdHdBtgDeG97/GTgW8DeSR5VVS/qrbLhOhY4A9i/Pb6Mpv0NU5NzEnAD8K/t8SHA7YD/At4J/GY/ZQ2a95bpO4zmvnJae/xImnvNmiRHV9VxfRU2YINuc8PU6PYCHlZVNwAkeTPwGeDhwLl9FjZg966qpyc5FKCqrnYD7Yl7bFXts+j43CRnVtU+SZ7ZW1XD5r1l+rYG7ltV3wdIcnfg3cBDgE8DK/qDfUYNus0dMzW67YA7LDq+PXCX9gZ4bT8lDd51SW5L+9gpyb2xrSdtVZJ9Fw6SPJhmsV6A6/spafC8t0zfTgsf6q0ftOf+G/hZTzUN3aDb3J6p0b0eODvJJ4EAjwBeneT2wCf6LGzAXgF8DNgpyXuAhwHP6bWi4ftd4B1J7kDzPr8S+N32ff6aXisbLu8t0/fJJB9h00ern2zb/H/6K2vQBt3mroB+MyS5J7Dwrf30qvpun/XMgyR3Bfaj+ZD5YlX9sOeS5kKSOwFU1RV91zIPvLdMVztc4Mk0X9AAPge83z1lJ2fobW6YuhmS7ADswqIevar6dH8VDZ9tPl1Jbk1zw9uVTdv86L5qmge+z6WVzcd8I0ryOuDpwHnAz9vTRTNwThNgm/fiQzTTlc/A8TpT4ft8+tpp+q8D7kbT6x2gqmrbXgsbsKG3uT1TI0pyIbBXVfkBMyW2+fQl+WpV3a/vOuaJ7/PpS7IB+M2quqDvWubF0Nvc2Xyjuwi4Vd9FzBnbfPo+n+T+fRcxZ3yfT9/3h/qhPsMG3eY+5hvd1TQzbk5l0eOPqnphfyUNnm0+fQ8HnpPkWzRtvtAVv1e/ZQ2a7/PpW5/k34H/YNM2/0B/JQ3eoNvcMDW6de2Ppsc2n77H9V3AHPJ9Pn3b0oTYX1t0roBBfLDPqEG3uWOmJJFk26q6Msldlnq9XVhPkrQEw9QykpxQVU+7iQ1g8fHH+Nnm05fkI1X1hPbxXtE83ltQVXWvnkobLN/n05fk/62q1yd5I0u3uY9Wx2xe2tzHfMs7sv3zCb1WMV9s8ymrqie0f67pu5Y54vt8+hYGQK/vtYr5Mhdtbs+UJJLss6XXq+rMadUiSSuNYWoZSa5iia7JBUNZcGyWbNbmC4+bFh49DWaRt1mS5LT219sAa4FzaNp7L2B9Ve3fV21D5b1l+pJ8mC23+UFTLGcuzEub+5hvGVV1R4AkrwK+BxxH8yHzDOCePZY2WAttrumpqkcBJPkAsE9Vndse3w94ZY+lDZb3ll78Tfvnk4B7AP/SHh8KfL+XioZvLtrcnqkRJTmnqvZe7pzGK8nDgd2q6tgk2wN3rKpv9V3XUCU5r6p+eblzGh/vLdOXZH1VrV3unMZn6G3uCuij+0mSZyRZlWSrJM8AftJ3UUOW5BXAnwAvbU9tw43fajQZX0nytiSPbH/+GfhK30UNnPeW6bt9kl/MUE2yBrh9j/XMg0G3uT1TI0qyK/APwMNonv9+DnhRVV3cX1XDluRs4IHAmVX1wPbcV5wyPjlJbgP8AfCI9tSngTdX1TX9VTVs3lumL8mBwFtptvIJsAvwe1V1cq+FDdjQ29wwpZmV5MtVtW+SM6tqnyS3B75gmJLUVZJbA3u0h19zo+nJG3KbOwB9GTe10NiCoSw4NqNOSPIW4M5Jngc8F/jnnmsapJtaOHKBAXb8vLdMX5In3cRL904ymH3iZsm8tLlhankLC409DNgT+Pf2+KnA+b1UNCeq6m+SHABcCewOvLyqPt5zWUO1sHDk89s/j2v/fCZb+MBXJ95bpu832z/vBjwUOJXmkdOjgM8zkH3iZsxctLmP+UaU5IvAw6vq+vb4VsBnqmq/fisbrvax3jVVdUOS3WkC1UlV9bOeSxusJGctjE9bdO7Mqtriop665by3TF+SU4BnV9X32uN7Au+sql/vt7LhGnqbO5tvdNvR7Hq94A7tOU3Op4FbJ9kB+BjwLOCdvVY0fEnysEUHD8X7xKR5b5m+nRY+1FvfB3buq5g5Meg29zHf6F4LnNWuFB2a2U6v7LWi4UtVXZ3kMJoZZa9vZ/hpcg4D3pHkTu3x/9CMVdPkeG+ZvlOTnAz8W3v8dOATPdYzDwbd5j7muxmS3AN4SHv4par6rz7rGbokZwF/CPwdcFhVnZfk3Kq6f8+lDd5CmKqqK/quZR54b5m+JL/FoiVAquqDfdYzD4bc5nbfjyhJgMcCe1fVh4Btkuzbc1lDdyTNgp0fbIPUvYDTlvk76iDJ3ZO8HTi+qq5IsmfbM6gJ8d7SmzOBj1bVi4GTk7iN1eQNts3tmRpRkjcDPwceXVX3TbIdcEpVPbjn0qSxSXIScCzwZ1W1d5KtgbPsDZwc7y3T1y61cjhwl6q6d5LdgH+qqsf0XNpgDb3N7Zka3UOq6vnANQBVdTnN9iaakCSrk/x1khOT/OfCT991Ddz2VXUCzYc77QyzG/otafC8t0zf82mWpLgSoKq+QTN1X5Mz6DY3TI3uZ0lW0a65k2Q17QeOJuY9wNeANcBfABcDp/dZ0Bz4SZK7cuP7fD/AcVOT5b1l+q6tqusWDtoeWB/TTNag29wwNbo3AB8E7p7kr4DPAq/ut6TBu2tVvR34WVV9qqqeCzy676IG7iXAOprViT8HvBt4Qb8lDZ73lun7VJI/BW7bLgz8XuDDPdc0dINuc8dM3QxJ9gAWnu/+Z1Vd0Gc9Q5fki1W1Xzud9g3Ad4H3VdW9ey5t0NpvjLvTTNO/0EVSJ897y3Ql2YpmGZBfo3mfnwy8rfxAnJiht7nrTN08twMWuuNv23Mt8+Av2yn6fwS8kWZhwxf3W9KwJbkNzXIUD6d5n38myT9V1TX9VjZ43lumqKp+nuRdwJdo2vzCoXyoz6qht7k9UyNK8nKaPbPeT5Oqnwi8t6r+stfCpDFKcgJwFfAv7an/A9y5qp7aX1XD5r1l+pI8Hvgn4Js0bb4G+L2qOqnXwgZs6G1umBpRkgtp1oG5pj2+LXB2Ve3eb2XD1a4r9Q/A/jQDcr8AvLiqLuq1sAFLcn5V7bncOY2P95bpS/I14AlVtaE9vjfN+kd79FvZcA29zR2APrrvArdZdHxr4LKeapkX/wqcANwD+CWaAYv/tsW/oa7ObGfwAZDkIcD6HuuZB95bpu+qhQ/11kU0PbKanEG3uWOmlpHkjTTPd68Azkvy8fb4AODLfdY2B25XVcctOv6XJH/cWzUDluRcmvf1rYDPJ/lO+9LONMtTaMy8t0xfkie1v65PciLNl7WieczqsisTMC9t7mO+ZSR59pZer6p3TauWeZHkLu2vfwJcDhxP8/98Twe2q6qX9lXbUCXZZUuvV9W3p1XLvPDeMn1Jjt3S61X1O9OqZV7MS5sbpjRzknyLJjxliZerqu415ZLmSrudyU4s6rmuqjP7q0iSZpthakRJngC8CtiF5kMmNB/s2/Za2BxLckBVfbzvOoYkyauA59DMuFm4OVRVuVjqhHhvmb4ka2gWo92VTb80HNRXTUM39DY3TI0oyQbgScC5Q1obYyVLcmZV7dN3HUPSziy7/+JtHzRZ3lumL8k5wNuBc1m0dU9Vfaq3ogZu6G3uAPTRXQJ81ZvdTFnqMaC6+SpwZ+AHfRcyR7y3TN81VfWGvouYM4Nuc3umRpTkwTRd8Z8Crl04X1V/21tRc86eqfFLshb4EE2oWvw+H0RX/Czy3jJ9Sf4PsBtwCpu2uWMDJ2TobW7P1Oj+CvgxzXow2/RcizQp7wJex2Zd8Zoo7y3Td3/gWTQbpy+8zws3Up+kQbe5YWp0v1RV9+u7CG3i4r4LGKCrh9wVP6O8t0zfU4F7OTZwqgbd5oap0Z2Y5Neq6pS+C5kHSfYADgZ2aE9dBqyrqgsWrqmqJy31d9XJZ5K8BljHALviZ5T3lulzbOD0DbrNHTM1oiRXAbcHrmt/nL48IUn+BDiUZrHOS9vTOwKHAMdX1Wv7qm3okpy2xGmXRpgg7y3Tl+STwF40K3A7NnAKht7mhinNnCRfB365qn622fltgPOqard+KpM0BEl+danzQ5mmP4uG3uZudDyiNJ6Z5M/b452S7Nt3XQP1c5qNjTd3TxwUPVFJ7p7k7UlOao/3THJY33UNmfeW6Ws/wC8GbtX+fjrgo+wJGnqbG6ZG9yZgf+D/tMc/Bo7pr5xBexFwapKTkry1/fkYcCpwZM+1Dd07gZO5Mcx+neZ/D02O95YpS/I84H3AW9pTOwD/0V9Fwzf0NncA+ugeUlX7JDkLoKoubx87acyq6mNJ7gPsy6YD0E+vqhsWrkuyXVVd3keNA7Z9VZ2Q5KUAVXV9khuW+0vqxHvL9J9b6DQAACAASURBVD2f5v7yJYCq+kaSu/Vb0uANus0NU6P7WZJVtPuVJVmNj5wmpqp+DnxxmctOBVy0c7x+kuSu3Pg+3w+4ot+SBs97y/RdW1XXJc0mCkm25sa9KDUZg25zw9To3gB8ELhbkr8CngK8rN+S5p7byYzfS2iWRbh3ks8Bq2ne65oc7y3T96kkfwrcNskBwB8CH+65pqEbdJs7m+9maNc+egzNh/ipi9c88pHT9LmdzGS03xh3p3mfX7h4VmWSA6rq470VN1DeW6YryVbAYcCv0bT5ycDb3B9xcobe5oapMfGDffps8+mzzafPNp++JO+vqif3Xcc8Welt7my+8fGR0/TZ5tNnm0+fbT599+q7gDm0otvcMVPjYxffmCS5y5Zer6r/bn99zBTK0aZ8n0+fbT59tvn0reg2N0xpFp1B8/9YS30jL9pvMItClSRJvTFMjY9d8WNSVWv6rkE36eK+C5hD3lumzzafvhXd5g5AH0G7Bsx5VbXHFq65iz0l45VmQZJnAGuq6lVJdgbuUVVf7rm0QUvyUGBXFn3Zqqp391bQHGjvMXdn0zb/Tvua95YpS/JrVXVK33XMk5Xe5oapESX5EPCChRucJi/Jm2kWL3x0Vd03yXbAKVX14J5LG6wkxwH3Bs4GFlY+r6p6YX9VDVuSFwCvAL7PjYt1VlXt1V9Vw5bkYcArgV1oAmxo2nxFD4KeZUNvcx/zjW474LwkXwZ+snCyqg7qr6TBc5uN6VsL7DmUtV9WiCOB3avqR30XMkfeDryYZnym2yVNx6Db3DA1uj/vu4A55DYb0/dV4B7A9/ouZI5cglv2TNsVVXVS30XMmUG3uY/5NLOSPAN4Os3+e++i3Wajqt7ba2EDluQ04AHAl4FrF87bAzs5Sd5Os+L8R9m0zf+2t6IGLslrgVXAB9i0zc/sraiBG3qb2zM1onbD1zcC9wW2oXlT/KSqtu21sAGrqvckOYMbt9l44uJtNjQRr+y7gDn0nfZnm/ZHk/eQ9s+1i84V8OgeapkXg25ze6ZGlGQ9cAjwXpo3w28D96mql/Za2ADdjEU7NQFJdgF2q6pPJLkdsKqqruq7rqFLcruqurrvOiTdfG4nczNU1QaaD5YbqupY4MC+axqoM4D17Z8bga8D32h/P6PHugYvyfOA9wFvaU/tAPxHfxUNX5L9k5wPfK093jvJm3oua9CS3D3J25Oc1B7vmeSwvusasqG3uWFqdFe3M8nOTvL6JC/G9puIqlrTTpf9BPCbVbV9Vd0VeAKwYtchWSGeDzwMuBKgqr4B3K3Xiobv74FfB34EUFXnAI/otaLheydwMvBL7fHXgRf1Vs18eCcDbnPDwOieRdNeR9AsjbATsGJ3uF4h9quqExcO2pkgD+2xnnlwbVVdt3CQZGtW+J5ZK0FVXbLZqcFNHZ8x21fVCbSzg6vqemzzSRt0mzsAfURV9e3212uAv+izljny3SQvA/6lPX4G8N0e65kHn0ryp8BtkxwA/CHw4Z5rGrpL2lXnK8mtaNadcqLFZP0kyV25cdmV/XB5ikkbdJs7AH1ES6zeCsBQVm+dRe1A9Fdw4yOPTwN/4QD0yUmyFXAY8Gs0MyhPrqp/7reqYUuyPfAPwGNp2vwU4IW+zycnyT40s7PvR7O22mrgKVX1lV4LG7Cht7lhakRJvsYSq7e6avHkJbkjzbYDP+67lqFLcnRVvXzR8Srg3VX1jB7LGrQkj9t8McMkv19V/9RXTUOXZA3NYqm70wTYC4EHVNXpvRY2YENvc8dMje6Kqjqpqn5QVT9a+Om7qCFLcv92K5mv0mzlc0aS+/Vd18DtlOSlAO2Ei/fTzKTU5Px5kl+stZPkj4GDe6xnHrwPuHtVnVdVXwX2B97Rc01DN+g2t2dqGW3XJMDTGPDqrbMoyeeBP6uq09rjRwKvrioHoU9IkgDvAc4FHgWcVFV/129Vw9Y+5vsI8Mc0y63sARy6eCKAxivJg4E3Ab9Js8PCa4AnLDERQGMy9DY3TC2j3V7jplRVDWL11lmU5Jyq2nu5c+pu0ZcGgFvRrDP1OZrNSf3SMGFJ7kazFMgZwHPdaHrykuxP8z6/Bnh8VW3suaTBG3KbG6Y0s5J8EDgTOK499UzgQVX1W/1VNUx+aZi+JFex6bIT2wDXt+fKrarGL8mH2bTN96TZ1PtycA/KSZiXNjdMjSjJq4HXV9X/tMfbAX9UVS/rt7Lhatv4L2gWkQT4DPDKhf8NJOnmSPKrW3q9qj41rVrmxby0uWFqREnOqqoHbnbuzKra56b+jrpJshb4M2BXblyOoqpqr96KGrgkd2LT5Sg+BRxdVYNZD2YWJTmIG9v8k1X1kT7rmQdJ7g48uD38clX9oM965sGQ29zZfKNbleTWCwdJbgvcegvXq7v30Mz2eBLNVjJPoBm8qMl5B3AVzYSLp9FsK3NsrxUNXJLX0izUeX77c2SS1/Rb1bAleRrwZeCpNO/zLyV5Sr9VDdvQ29yeqREl+ROaD/KFD5bfAdZV1ev7q2rYkny2qh7edx3zJMnZVfWA5c5pfJJ8hWa9nZ+3x6uAs+yBnZwk5wAHLPSMJFkNfMLJLZMz9DZ3O5kRVdXr2jfDY9tTr6qqk/usaQ68IsnbgFPZdDmKD/RX0uD9NMnDq+qz8IuV/3/ac03z4M7Awornd+qzkDmx1WaPmH6ET2ombdBtbpi6GarqY8DHlnotyReqav8plzR0v0Oz5s6taDfHpJkVYpianN8H3t2OnYJmxs2ze6xnHrwGOKudURmasVMv7bekwftYkpOBf2uPnw6ctIXr1d2g29zHfGOy1AB1dZPkwqrave865kmSNVX1rSTbAlTVlQvn+q5tyJLck00H5v5Xn/XMgyRPAhaGEXymqj7YZz3zYMhtbpgaE2f2jV+SY4G/rqrz+65lXiz1Pk5yRlU9qK+ahi7JqVX1mOXOaXySvK6q/mS5cxqfobf5YJ5XapD2A85OcmGSryQ5tx2sqzFLskeSJwN3SvKkRT/PAW7Tc3mDlOQ2Se4CbJ9kuyR3aX92BXbot7rBO2CJc4+behXzZdBt7pip8UnfBQzQgX0XMEd2p1l64s5suvzEVcDzeqlo+H4PeBHwSzTbyCzcQ64E/rGvooYsyR8Afwjca7MvZnek2T5JYzYvbe5jvpupHUvyixBaVf/dnr9fuxO2tGIl2b+qvrCF119aVa6BNEZJXlBVb9zC6wdU1cenWdNQtRMrtqMZ9H/UopeuWriXt9dtV1WXT7u+IZqXNjdMjSjJ79FsbXINN+4zVFV1r/6qkqbLsYHTZ5tPn20+fSu9zX3MN7r/C9yvqn7YdyFSj3ycPX22+fTZ5tO3otvcAeij+yZwdd9FSD2zK3v6bPPps82nb0W3uT1To3sp8PkkX2LT1bhf2F9J0tSt6G+PkjQJhqnRvQX4T+BcblyNW5o37+27gCFJshWwX1V9fguXXTylcnQjvzRM34pucwegj8gVzjVkSd7IFrrZ7YGdHO8t/UiyHbATm87OPrN97S6LZ5qpm3bz7vOqao8tXLOi29yeqdGdlORw4MNs+phvxf6PLy2yvv3zYcCewL+3x08FXIF+sk5tF0z9QPntdiqSvAp4Ds1Y2F/MzgYeDd7Xx62qbmgXX965qr5zE9es6Da3Z2pESZbam8ylETQoSb4IPLyqrm+Pb0Wzh9Z+/VY2XEmuAm4PXE+z9Epo7i3b9lrYgCW5ELh/VV3Xdy3zIsmngQcCXwZ+snC+qg7qragxsmdqRFW1pu8apCnYDtgWWPiWeIf2nCakqu7Ydw1z6Ks0q/3/oO9C5sif913AJBmmRtR+Q/8D4BHtqU8Cb6mqn/VWlDR+rwXOSnIaTQ/JI4BX9lrRHGjH7+zGon0Qq+rT/VU0eK+heZ9/lU2HbQyil2QWVdWn+q5hknzMN6IkbwNuBbyrPfUs4Iaq+t3+qpLGL8k9gIe0h1+qqv/qs56hS/K7wJHAjsDZNBt8f6GqHt1rYQOW5DyaGdqbzM4e+gd+n5LsB7wRuC+wDbAK+MlQHmfbMzW6B1fV3ouO/zPJOb1VI01AkgCPBe5VVUcn2TnJvlX15b5rG7AjgQcDX6yqRyXZA3h1zzUN3dVV9Ya+i5gz/wgcQrO8ylrgt4H79FrRGLkC+uhuSHLvhYMk9wJu6LEeaRLeBOwPHNoeXwUc0185c+GaqroGIMmtq+prwO491zR0n0nymiT7J9ln4afvooauqjYAq6rqhqo6Fjiw75rGxZ6p0f0xcFqSi2jGkuwCPLffkqSxe0hV7ZPkLICqujzJNn0XNXCXJrkz8B/Ax5NcDny755qGbmFdr8WzVH+xNIIm4ur2XnJ2ktcD32NAHTqOmRpRklu3vy58Y7wQoKquXfpvSCtPu13SQ4HT21C1GjjFRSWnI8mvAncCPua0fQ1Jkl2A79OMl3oxzfv8TW1v1YpnmBpRkjOrap/lzkkrWZJnAE8H9qGZbPEU4GVV5TYyE9SuEH13Nl2Ne8nFDdVdkjsBr+DG2dmfAo6uqiv6q0ormY/5ltHObNoBuG2SB3Lj/kHbArfrrTBpAqrqPUnOAB5D815/YlVd0HNZg5bkBTQf7N/nxpllBezVW1HD9w6ataae1h4/CzgWeFJvFQ1ckofRLLOyC5t+aRjEwtf2TC0jybNpth1YC5zOjWHqKuCdVfWBnkqTJsJekulKsoFmrNqP+q5lXiQ5u6oesNw5jU+Sr9E83juDRZO3hvK+t2dqGVX1LuBdSZ5cVe/vux5pkjbrJbmBdmsT7CWZpEsAHy9N10+TPLyqPgu/6DX5ac81Dd0VVXVS30VMij1TI0pyJE038FXAP9OMKTmqqk7ptTBpjOwlmZ4kL2l//WWaiS0fZdPVuP+2j7rmQZK9gXfTDIIGuBx4dlV9pb+qhmnRkhNPo1mo8wNs+j4/s4+6xs2eqdE9t6r+IcmvA3elecZ+HGCY0pDYSzI9C3vyfaf92ab90eRdWVV7J9kWoKquTOL+q5Px/212vHbR74NZjsIwNbqFsVK/Aby7qs5rV4uWhuQi4JNJ7CWZsKr6i75rmGPvB/apqisXnXsf8KCe6hmsqnpU3zVMw2AWzJqCM5KcQhOmTk5yRxbt6SQNxHeAj9P0kNxx0Y8mJMnH20U7F463S3JynzUNVZI9kjwZuFOSJy36eQ6LNpnW+CV59RLv87/ss6ZxcszUiJJsBTwAuKiq/ifJXYEdfMYuqYubmFl2lguljl+Sg4EnAgcB6xa9dBVwfFV9vpfC5sBS7+khrdXoY77RPbz9cy+f7mlokvx9Vb0oyYdpxjFsoqoO6qGseXFDkp0Xlp9oV4r2W+4EVNWHgA8l2b+qvtB3PXNmVbv35LUASW4L3HqZv7NiGKZG98eLfr8NsC/NehmDGDynuXdc++ff9FrFfPoz4LNJPkUzNvNXgMP7LWnwfivJeTTLIXyMZumPF1fVv/Rb1qC9Bzg1ybHt8e/Q7LIwCD7mu4WS7AT8fVU9ue9aJK1sSbbnxk13v1hVP1z02i9X1Xn9VDZMC49Wk/wW8ATgJcCnq2rvnksbtCQHAo9tDz9eVYMZG2jP1C13KXDfvouQxinJbsBrgD1ZNCB3KFs+zKo2PH3kJl4+jmZdO43Prdo/Hw+8t6qucPjG5FXVx2h6Av+XJF+oqv2nXNLYGKZGlOSN3DiOYWEw+iAWG5MWOZZmBfS/Ax5F0xXvrN9++Sk/fh9utzf5KfAHSVYD1/Rc07xb0bMpfcw3onaPvgXXAxdX1ef6qkeahCRnVNWDkpxbVfdffK7v2ubVkGY8zZIkd6HZ4uSGJLcDtq2q/+q7rnm10t/n9kyN7n3ANVV1AzSbwSa5XVVd3XNd0jhd2y4D8o0kRwCXAXfouSZprJL89qLfF7/07ulXoyGw+350pwK3XXR8W+ATPdUiTcqRwO2AF9KsBv1M4Nlb/BuatOv6LmCAHrzo51eAV9KsPaX+rOjH2T7mG9FNLKz3v85JK1WSVcDrqur/9l3LPFi0AeyShrIB7ErQrsx9fFUd2HctQ5Xk9sBPq+rnSe4D7AGcVFU/a1+/X1V9tdciO/Ax3+h+kmSfhRtckgfRDF6UBqEdO/Lw5a/UmCxsAHsbms1fz6H5dr4XsB5YsTObVqCfAG50PFmfBn4lyXbAKcDpwNOBZwCs5CAFhqmb40XAe5N8l+aGdw+aN4I0JGclWQe8l+YDBoCq+kB/JQ3TwgawST5As+nuue3x/WgeO2lCNlvpfyuapUBO6K+iuZCqujrJYcCbqur1Sc7uu6hxMUyNqKpOT7IHsHt76sKF7kmAJAdU1cf7qU4am9sAP2LTlf0LMExNzu4LQQqab+hJXMNushav9H898O2qurSvYuZEkuxP0xN1WHtuVY/1jJVh6mZow9NNdUW+DjBMaaV72+ZLfiR5WF/FzImvJHkbsLCVyTMAN1CfrO8A36uqa6DZJy7JrlV1cb9lDdqLgJcCH6yq85LcCzit55rGxgHoY+Iu7xqCpdZ6Wenrv8y6JLcB/gB4RHvq08CbFz7oNX5J1gMPrarr2uNtgM9V1YP7rWz4ktwBoKp+3Hct42TP1PiYSrVitd3vDwVWJ3nJope2ZUBd8bOoDU1/1/5oOrZeCFIAVXVdG6g0IUnuT7OO112aw2wEfnso+04apiQBbEOzOOfWwB0Xnb8SeEovFQ1ckhOq6mlJzmWJL2NVtVcPZc2LjUkOqqp1AEkOBn64zN9RN28BXlJVpwEkeSTwzzRf4lY8H/ONSZIPVNWT+q5D6iLJLlX1bVf3n7wk96yq7yXZZanXq+rb065pXiS5N/Ae4JfaU5cCz6qqb/ZX1bAlOaeq9l7u3EplmBpBkn2Bamf07QkcCHytqk7suTRprNrHfW8H7lBVOyfZG/i9qvrDnksbpHah1E8sLJOg6bqp8TtJnl1V7+qnqmFK8kHgTOC49tQzgQdV1W/1V9X4uJ3MMpK8AngD8OYkrwH+Ebg9cFSSP+u1OGn8/h74dZrlEaiqc7hxYLTGrN3r8+dJ7tR3LfOoqn58EwOhj5x6McP3XGA1zTIrH2h/f26vFY2RY6aW9xTgAcCtgf8CdqyqK5P8DfAl4K/6LE4at6q6ZLPNX2/oq5Y58WPg3CQfZ9OFUl/YX0lzb0XvEzeLqupy4IXtF4efV9VVfdc0Toap5V3ffnu8Osk3q+pKgKr6aZKf91ybNG6XJHkoUEluRfMN/YKeaxq6hW/qmh2OfxmzJA8G3kE7wSXJFcBzq+qMXgsbE8PU8q5bNBj3QQsnF9J1f2VJE/H7wD8AOwCX0eyh9fxeKxq4qnpXOy1/D5oP8QsXT9tXL+yZGr+3A39YVZ8BaPcBPZZmL8oVzzC1vEdU1bUAVbU4PN0KePbCQZLt2m5MaUVqB0P/Q1U9o+9a5kmS36CZNv5Nmg/xNUl+r6pO6reyufa55S/RzXTDQpACqKrPJrm+z4LGydl8Y+Iq0RqCJJ8FHm3PyPQk+RrwhKra0B7fG/hoVe3Rb2XzJcnvVNWxfdcxVEn+Hrgt8G80PbBPB66h3Uapqs7sr7ruDFNj4nYyGoIk7wbuC6xj08HQf9tbUQOX5PTF25ikGf3/Zbc2ma4k36mqnfuuY6iSbGkfvqqqR2/h9ZnnY77xMZVqCL7Z/mzFpiuha8ySLCzyuz7JicAJNPeRpwKn91bYgCW5qQ2kA9x9mrXMm+XWUlvpa3vZMzUmPubTkCTZlubb4qCmL8+SJFt6pFRVNZg1eGZFku/TrKO2+fjWAJ+vql/6339L07DSP0PtmRofZ39oxUuylmaGzSCnL8+SqvodgCR3raof9V3PnPgIzer+Z2/+QpJPTr8cLbKiP0PtmVpGkrts6fWq+u+F6xZ+l1aq9jHI8zebvvwmN92dnCTfAM6mCbEnlTfl3jk7e/rsmRq+M2jGMSyVmgu4F9wYqqQVbtDTl2fUfYDH0myt8YYkJwDvrKqv91vWXDsVWLEf7CuUPVOShmHo05dnXZJH0bT17YFzgKOq6gv9VjV/nJ09fUn+saqO6LuOW8owNaJ2uvIzgDVV9aokOwP3qKov91yaNDZDn748i5LcFXgm8Czg+zQrRa+j2RP0vVW1psfy5tJKf+Q0y9qhA/sCX62qU/quZ1x8zDe6N9FsH/No4FXAVcD7AdeC0WAMffryjPoCcBzwxKq6dNH59Un+qaeapLFI8uWq2rf9/Xk021N9EHhFkn2q6rW9Fjgm9kyNaOGbyuLu3yTnVNXefdcmTYvf2McvSRx0Plt8zDc+m31mng78RlVtTHJ74ItVdf9+KxwPe6ZG97N277ICSLIaNzrW/FnRg0Rn1G5J/i+wK4vuyT5SHb9RZ2cDj5lCOfNiqyTb0SwEnKraCFBVPxnS5BbD1OjeQNM1ebckfwU8BXhZvyVJU2cPyvi9F/gn4G3ADT3XMnTOzp6+O9G0e4BKcs+q+l6SOzCgL2c+5rsZkuxB840lwKlVdUHPJUlT5eOP8UtyRlU9qO86pGlKcjvg7lX1rfZ4Ra/tZZhaxs3oFpYGb6VPX54li+4tLwR+QNPzfe3C695bJsfZ2bNnpY/HNEwtI8m3uLFbeGeaPZ0C3Bn4jtOWNRRtz+sOwJeq6seLzh9YVR/rr7Jh2uzesrmqqntNuaS5keTNtLOzq+q+7ZieU6rK2dk9Wem93lv1XcCsq6o17U3tE8BvVtX2VXVX4AnAYNbI0HxL8kLgQ8ALgK8mOXjRy6/up6phW7i3tH9u/vOLIJXkgD7rHKiHVNXzaRakpX28tE2/Jc29Fd2zY5ga3X5VdeLCQVWdBDy0x3qkcXoe8KCqeiLwSODPkxzZvjaYQaIr1Ov6LmCAnJ2tsXI23+i+m+RltNtq0Dxv/+7/394dhGhRx2Ecf56oLtIlVDrYrtGhCIywNQVDrC5FIdYlRCEUOnWzTq2yiOQhiKBDoEWQ1ql0oUOdLN3KQ2AJSuJlq4skdImECoJfh5n33bfXJUd23vnP/Of7gRecWQ9/ln3f/e3M/3km4XqAOt02uLUXET/b3i7pU9vTYphKje9//Uhnt0+nf84ZpqrbJWlOxRtQkhbKc0AOrtl+JCIuSFJEXLf9nKQPJGVRqtdhnb790UYR8bHt81pKZ+8knT0Zfen2YgP6LbJ9l4rNoddv+p+BjrC9TtI/EfHrMl/bGhHflv/udHy5i7qecmoT0tnN60vQgmGqItsbJB2XNHgz/ibppYi4lG5VQLP4xd4826ci4oXU68gB6WxMChvQqzsqaX9ETEfEtKRXJR1LvCagaZ3e19B2to+Pn2OQqg/p7HRc2GP7YHk8Zfux1OuqC1emKlruocY86Bh9w5Wp+tj+bPyUpCckfSlJEbGj8UX1hO2L4w/YXe4c6pN7txcb0KtbLCfqE+XxHkmLCdcDoNvWSfpRxTP5BreeZiS9lXJRPUE6u3mbI2Kj7R+kotvLdjbdXtzmq26fpDWSTpav1ZL2Jl0R0Dxu89VnRsUDYGcl/R4RZyT9GRFnI+Js0pXlb5eKz/P58rVWpLMnLetuL27zVWR7RsWH3notXdGLiHg42aKAmlRNOdm+m8RTvcok5duSrknaERFTiZfUG6Szm2N7t6QXJW2U9KHKbq+I+CTpwmrCMFWR7SuSXpN0SSPTdET8kmxRQE36El9uM9vPStoaEa+PnaeOomaks9Mon/856PY6nVO3F8NURba/iYjHU68DQL+w6b9+ts9Jmo2Ir8rj7ZKORASPCKtZX7q92IBe3Zzt9yWdlvT34GREnEq3JKBetq1iM+59EXHY9pSkeyLiu8RL6zP2qdVv1WCQkqSIOGN7VcoFZey8/qfbS1IW3V4MU9XtlfSgpDu0dJsvJDFMISfvqowvSzos6Q8VgYss4ssdxe2D+pHObsigCNX2e5LmI+Lz8vgZSTtTrq1ODFPVbYqIB1IvApiwrOPLQGmfpEMq/lCQpK9FOnvStkTEy4ODiPjC9pspF1QnqhGqO2f7odSLACYs6/hyR3Gbr373S7pXxe/AO1Vsil5IuqL8XbV9wPb68jWrjLq92IBeke3LKt6AP6nYM2VRjYDM5B5fbhPqKNIhnd288ud9TtK28tSCpEO5/GwzTFVke3q587z5kJuc48ttQh1FOqSz08m124thCkBv4suAJNl+SkXjOenshuTe7cUGdABST+LLbUQdRRKks5t3VNL+sW6vY5Ky6PZimALQm/hyS1FH0TzS2c3LutuLNB+AUVsGg5RUxJeVyV+OLbY5Il6R9JdU1FGoSJhhckhnN2/R9sGRNN8BZdTtxZUpAKOulh9yH5XHu5VRfLmlqKNo3hZJF8oQAOnsZmTd7cUwBWDULhXx5fnyeKE8h8l5R8X3e63tN1TWUaRdUvaeTr2AHhrt9rpdRWL4SUlZDLCk+QDcINf4cltRR4Hc5d7txTAFYCj3+HKbUEeBPsm924thCsCQ7XOSZsfiy0cigk3oNRsr7byhjmKQsARykHu3F3umAIzKOr7cJtRRoGey7vbiyhSAIdvzkr6XdKI8tUfSoxHxfLpV5c32xYjYcLNzQJfZvpJztxc9UwBG7ZO0RkV8+aSk1coovtxSV20fGOnfmRV1FMhP1t1eXJkCMGR7RtKspPVa2gZA/84ElRvR5yRtK08tSDrEBnTkxPZlFfUIWXZ7MUwBGMo9vtxm1FEgZ7anlzufy2cLwxSAodzjy21EHQXQfQxTAIZyjy+3EXUUQPdRjQBgVNbx5ZaijgLoOIYpAKM25RxfbqlF2wf13zqKxYTrAXCLqEYAMCrr+HJLUUcBdBx7pgAM5R5fbiPqKIDuY5gCMJR7fLmNqKMAuo9hCgASoo4C6D6GKQBIiDoKoPtI8wFAWtRRAB3HlSkASMj2FeoogG6jGgEA0qKOAug4rkwBQELUUQDdxzAFAAlRRwF0H8MUAADACrBnCgAAYAUYpgAAAFaAYQoAAGAFZRIVaAAAABNJREFUGKYAAABWgGEKAABgBf4F6BJWRLd8CrcAAAAASUVORK5CYII=\n",
            "text/plain": [
              "<Figure size 720x504 with 1 Axes>"
            ]
          },
          "metadata": {
            "tags": [],
            "needs_background": "light"
          }
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "4T1Qb-G_7O-v"
      },
      "source": [
        "## Save and load model "
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "8slNAghU7j-u",
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "outputId": "036674b1-c315-4639-8479-461ccb5ad175"
      },
      "source": [
        "# Save the best performing model to SavedModel format (default)\n",
        "model_5.save(\"skimlit_tribrid_model\")"
      ],
      "execution_count": 117,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "WARNING:absl:Found untraced functions such as lstm_cell_4_layer_call_fn, lstm_cell_4_layer_call_and_return_conditional_losses, lstm_cell_5_layer_call_fn, lstm_cell_5_layer_call_and_return_conditional_losses, lstm_cell_4_layer_call_fn while saving (showing 5 of 10). These functions will not be directly callable after loading.\n",
            "WARNING:absl:Found untraced functions such as lstm_cell_4_layer_call_fn, lstm_cell_4_layer_call_and_return_conditional_losses, lstm_cell_5_layer_call_fn, lstm_cell_5_layer_call_and_return_conditional_losses, lstm_cell_4_layer_call_fn while saving (showing 5 of 10). These functions will not be directly callable after loading.\n"
          ],
          "name": "stderr"
        },
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Assets written to: skimlit_tribrid_model/assets\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "stream",
          "text": [
            "INFO:tensorflow:Assets written to: skimlit_tribrid_model/assets\n"
          ],
          "name": "stderr"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "MhT2bMpo8qj8"
      },
      "source": [
        "# Load in best performing model\n",
        "loaded_model = tf.keras.models.load_model(\"skimlit_tribrid_model\")"
      ],
      "execution_count": 118,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "O1U4J4Eg9FBU",
        "outputId": "8114e7f4-5cd5-4b28-d1ee-34fde15d5db8"
      },
      "source": [
        "# Make predictions with the loaded moel on the validation set\n",
        "loaded_pred_probs = loaded_model.predict(val_char_token_pos_dataset)\n",
        "loaded_preds = tf.argmax(loaded_pred_probs, axis=1)\n",
        "loaded_preds[:10]"
      ],
      "execution_count": 120,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "<tf.Tensor: shape=(10,), dtype=int64, numpy=array([0, 0, 3, 2, 2, 4, 4, 4, 4, 1])>"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 120
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "d9Reuh0Z9isU",
        "outputId": "8c236ca6-9ae4-4bf8-878c-67d7ded1856b"
      },
      "source": [
        "# Calculate the results of our loaded model\n",
        "loaded_model_results = calculate_results(y_true=val_labels_encoded,\n",
        "                                         y_pred=loaded_preds)\n",
        "loaded_model_results"
      ],
      "execution_count": 122,
      "outputs": [
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "{'accuracy': 83.36422613531047,\n",
              " 'f1': 0.832856749242421,\n",
              " 'precision': 0.8329936901758904,\n",
              " 'recall': 0.8336422613531047}"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 122
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "yFfLUOq_9MVN"
      },
      "source": [
        "assert model_5_results == loaded_model_results"
      ],
      "execution_count": 125,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "U2PIxTWO9NHW",
        "outputId": "a1649f6d-5e77-4338-99df-1cf84bdc7d77"
      },
      "source": [
        "# Check the loaded model summary\n",
        "loaded_model.summary()"
      ],
      "execution_count": 126,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "Model: \"model_5_tribrid_embedding_model\"\n",
            "__________________________________________________________________________________________________\n",
            "Layer (type)                    Output Shape         Param #     Connected to                     \n",
            "==================================================================================================\n",
            "char_inputs (InputLayer)        [(None, 1)]          0                                            \n",
            "__________________________________________________________________________________________________\n",
            "token_inputs (InputLayer)       [(None,)]            0                                            \n",
            "__________________________________________________________________________________________________\n",
            "char_vectorizer (TextVectorizat (None, 290)          0           char_inputs[0][0]                \n",
            "__________________________________________________________________________________________________\n",
            "universal_sentence_encoder (Ker (None, 512)          256797824   token_inputs[0][0]               \n",
            "__________________________________________________________________________________________________\n",
            "char_embed (Embedding)          (None, 290, 25)      700         char_vectorizer[0][0]            \n",
            "__________________________________________________________________________________________________\n",
            "dense_7 (Dense)                 (None, 128)          65664       universal_sentence_encoder[0][0] \n",
            "__________________________________________________________________________________________________\n",
            "bidirectional_1 (Bidirectional) (None, 48)           9600        char_embed[0][0]                 \n",
            "__________________________________________________________________________________________________\n",
            "char_token_hybrid_embedding (Co (None, 176)          0           dense_7[0][0]                    \n",
            "                                                                 bidirectional_1[0][0]            \n",
            "__________________________________________________________________________________________________\n",
            "line_number_input (InputLayer)  [(None, 15)]         0                                            \n",
            "__________________________________________________________________________________________________\n",
            "total_lines_input (InputLayer)  [(None, 20)]         0                                            \n",
            "__________________________________________________________________________________________________\n",
            "dense_10 (Dense)                (None, 256)          45312       char_token_hybrid_embedding[0][0]\n",
            "__________________________________________________________________________________________________\n",
            "dense_8 (Dense)                 (None, 32)           512         line_number_input[0][0]          \n",
            "__________________________________________________________________________________________________\n",
            "dense_9 (Dense)                 (None, 32)           672         total_lines_input[0][0]          \n",
            "__________________________________________________________________________________________________\n",
            "dropout_2 (Dropout)             (None, 256)          0           dense_10[0][0]                   \n",
            "__________________________________________________________________________________________________\n",
            "char_token_positional_embedding (None, 320)          0           dense_8[0][0]                    \n",
            "                                                                 dense_9[0][0]                    \n",
            "                                                                 dropout_2[0][0]                  \n",
            "__________________________________________________________________________________________________\n",
            "output_layer (Dense)            (None, 5)            1605        char_token_positional_embedding[0\n",
            "==================================================================================================\n",
            "Total params: 256,921,889\n",
            "Trainable params: 256,921,889\n",
            "Non-trainable params: 0\n",
            "__________________________________________________________________________________________________\n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "NruebCts_iGM"
      },
      "source": [
        "## Download and load in a pretrained model from Google Storage"
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "Cr45DJ3j_2TM"
      },
      "source": [
        "import tensorflow as tf\n",
        "import tensorflow_hub as hub\n",
        "from tensorflow.keras.layers.experimental.preprocessing import TextVectorization"
      ],
      "execution_count": 134,
      "outputs": []
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "mNUY5NGRAFkQ",
        "outputId": "813b918a-09be-46e9-ecab-1546bd3541e7"
      },
      "source": [
        "!wget https://storage.googleapis.com/ztm_tf_course/skimlit/skimlit_tribrid_model.zip\n",
        "!mkdir skimlit_gs_model\n",
        "!unzip skimlit_tribrid_model.zip -d skimlit_gs_model"
      ],
      "execution_count": 135,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "--2021-04-22 05:16:26--  https://storage.googleapis.com/ztm_tf_course/skimlit/skimlit_tribrid_model.zip\n",
            "Resolving storage.googleapis.com (storage.googleapis.com)... 172.217.7.176, 172.217.12.240, 172.217.15.112, ...\n",
            "Connecting to storage.googleapis.com (storage.googleapis.com)|172.217.7.176|:443... connected.\n",
            "HTTP request sent, awaiting response... 200 OK\n",
            "Length: 962957902 (918M) [application/zip]\n",
            "Saving to: ‘skimlit_tribrid_model.zip’\n",
            "\n",
            "skimlit_tribrid_mod 100%[===================>] 918.35M   257MB/s    in 3.6s    \n",
            "\n",
            "2021-04-22 05:16:30 (258 MB/s) - ‘skimlit_tribrid_model.zip’ saved [962957902/962957902]\n",
            "\n",
            "Archive:  skimlit_tribrid_model.zip\n",
            "   creating: skimlit_gs_model/skimlit_tribrid_model/\n",
            "   creating: skimlit_gs_model/skimlit_tribrid_model/assets/\n",
            "   creating: skimlit_gs_model/skimlit_tribrid_model/variables/\n",
            "  inflating: skimlit_gs_model/skimlit_tribrid_model/variables/variables.index  \n",
            "  inflating: skimlit_gs_model/skimlit_tribrid_model/variables/variables.data-00000-of-00001  \n",
            "  inflating: skimlit_gs_model/skimlit_tribrid_model/saved_model.pb  \n"
          ],
          "name": "stdout"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "cE5UfrNzAnAk",
        "outputId": "02a3cc23-7f87-4a0c-8dd3-c94c8bed7f12"
      },
      "source": [
        "# Load in downloaded Google Storage model\n",
        "loaded_gs_model = tf.keras.models.load_model(\"skimlit_gs_model/skimlit_tribrid_model/\")"
      ],
      "execution_count": 136,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "WARNING:tensorflow:7 out of the last 7 calls to <function recreate_function.<locals>.restored_function_body at 0x7f5380b12dd0> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for  more details.\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "stream",
          "text": [
            "WARNING:tensorflow:7 out of the last 7 calls to <function recreate_function.<locals>.restored_function_body at 0x7f5380b12dd0> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for  more details.\n"
          ],
          "name": "stderr"
        },
        {
          "output_type": "stream",
          "text": [
            "WARNING:tensorflow:8 out of the last 8 calls to <function recreate_function.<locals>.restored_function_body at 0x7f5380b3ccb0> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for  more details.\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "stream",
          "text": [
            "WARNING:tensorflow:8 out of the last 8 calls to <function recreate_function.<locals>.restored_function_body at 0x7f5380b3ccb0> triggered tf.function retracing. Tracing is expensive and the excessive number of tracings could be due to (1) creating @tf.function repeatedly in a loop, (2) passing tensors with different shapes, (3) passing Python objects instead of tensors. For (1), please define your @tf.function outside of the loop. For (2), @tf.function has experimental_relax_shapes=True option that relaxes argument shapes that can avoid unnecessary retracing. For (3), please refer to https://www.tensorflow.org/guide/function#controlling_retracing and https://www.tensorflow.org/api_docs/python/tf/function for  more details.\n"
          ],
          "name": "stderr"
        }
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/"
        },
        "id": "Flpi4pEfAglw",
        "outputId": "dfdc9e4e-7681-4c15-c120-3292ecb8fea9"
      },
      "source": [
        "# Evalaute the loaded Google Storage model\n",
        "loaded_gs_model.evaluate(val_char_token_pos_dataset)"
      ],
      "execution_count": 137,
      "outputs": [
        {
          "output_type": "stream",
          "text": [
            "945/945 [==============================] - 23s 22ms/step - loss: 0.9459 - accuracy: 0.8283\n"
          ],
          "name": "stdout"
        },
        {
          "output_type": "execute_result",
          "data": {
            "text/plain": [
              "[0.9459028244018555, 0.8283132314682007]"
            ]
          },
          "metadata": {
            "tags": []
          },
          "execution_count": 137
        }
      ]
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "CQrHsKk7A6KO"
      },
      "source": [
        "## Your challenges\n",
        "\n",
        "Try these out before moving onto the next module.\n",
        "\n",
        "The GitHub has an example of how to do each but I'd encourage you to try it for yourself first (you've got this!).\n",
        "\n",
        "1. Turn the test data samples into a tf.data Dataset (fast loading) and then evaluate (make predictions) the best performing model on the test samples.\n",
        "2. Find the most wrong predictions from 1 (these are the samples where the model has predicted the wrong label with the highest prediction probability).\n",
        "3. Make example predictions (on RCT abstracts from the wild), you can go to PubMed to find these: https://pubmed.ncbi.nlm.nih.gov/, find and use our model to predict on 3-4 different abstracts from the wild.\n",
        "  * Some examples: https://github.com/mrdbourke/tensorflow-deep-learning/blob/main/extras/skimlit_example_abstracts.json \n",
        "4. See the exercises and extra curriculum section on GitHub to further test your skills (for section 09) \n",
        "\n",
        "> See the full course materials (including an example of how to do the above) on GitHub: https://github.com/mrdbourke/tensorflow-deep-learning"
      ]
    }
  ]
}